|
7 / 7 / 0
Регистрация: 21.12.2016
Сообщений: 152
|
||||||
FindFirstFile не корректно определяет имена файлов с диакритическими знаками18.04.2023, 21:49. Показов 5468. Ответов 88
Метки нет (Все метки)
Доброго времени суток.
Делаю програмку, необходимо получить содержимое папки (список папок и файлов) и после определить ФАЙЛ или ПАПКА и другие атрибуты. Как всегда делал раньше, через API "FindFirstFile", привык, удобно и есть заготовки кода. И вот, выясняется такая неприятная ситуация. На компьютере есть несколько видео файлов с испанскими названиями. В них содержатся слова с Диакритическими знаками. например: "Niño cristiano GANA! concurso secular YouTube.flv español.mp4" Как выяснилось, "FindFirstFile" возвращая имя этого файла, возвращает его как: "Nino cristiano GANA! concurso secular YouTube.flv espanol.mp4" - ну и в дальнейшем соответственно вся обработка рушится. Вот код, давно когда-то нашёл на просторах интернета и всегда использовал:
Облазил весь интернет, так и не понял, как можно исправить данную ситуацию. Читал на каком-то зарубежном С++ форуме, что используют FindFirstFileW и WIN32_FIND_DATAW Но как это оформить и поможет ли это в моём случае, до конца так и не понял. Даже не понял, как объявить правильно на vb6. Если не затруднит, подскажите кто знает, решение. А лучше готовый кусок кода. Буду очень признателен.
0
|
||||||
| 18.04.2023, 21:49 | |
|
Ответы с готовыми решениями:
88
Работа с файлами поиск файлов FindFirstFile,FindNextFile |
|
Модератор
|
|
| 23.04.2023, 17:15 | |
|
ANSI строки - это многобайтовые строки. Я уже сказал как нужно делать - последний параметр WideCharToMultibyte говорит если при трансляции из UNICODE в ANSI возникают проблемы с представлением символа в нужной кодировке. Один раз вызвали - проверили последний параметр. Китайские символы точно также могут быть в ANSI кодировке, просто кодируются они не 1 байтом, а несколькими. 1-байтовые кодировки - это ASCII (ну и другие типа КОИ-8).
0
|
|
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
||
| 23.04.2023, 18:41 | ||
|
0
|
||
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
||
| 23.04.2023, 18:54 | ||
|
Ты меня ни разу не попровил когда мы работали с ANSI файлами с поиском например, ты ни разу не сказал, что это файл не ANSI а ASCII мало того ты сам называл это ANSI хотя по факту там ОДИН байт на один символ! Даже в том файле что я тебе присылал 40МБ большой помнишь
Добавлено через 40 секунд Поэтому я тебя не понимаю теперь уже вообще Добавлено через 1 минуту
0
|
||
|
Модератор
|
|||
| 23.04.2023, 19:21 | |||
|
0
|
|||
|
Модератор
|
||
| 23.04.2023, 19:37 | ||
|
0
|
||
|
7 / 7 / 0
Регистрация: 21.12.2016
Сообщений: 152
|
|
| 27.04.2023, 05:16 [ТС] | |
|
Доброго времени суток, ещё раз..
Вобщем как отловить это дело, я разобрался. Спасибо за советы!) Теперь вот озадачился, как дать всем файлам не повторяющиеся имена. Дело в том, что если я китайские иероглифы буду заменять просто на "_", то у меня все файлы будут получаться типа: "_____.png" - только с разным количеством символов. Повторы неизбежны. И вот я думаю, может сделать какой-то счётчик. Типа 0000001 и в каждой новой папке его запускать с нуля, наверное так. Пишу вот сейчас и мысль пришла)) пошёл пробовать.
0
|
|
|
Модератор
|
|
| 27.04.2023, 06:59 | |
|
1
|
|
|
7 / 7 / 0
Регистрация: 21.12.2016
Сообщений: 152
|
|
| 27.04.2023, 09:14 [ТС] | |
|
The trick, Спасибо, это лучшее решение.
0
|
|
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|
| 27.04.2023, 12:07 | |
|
0
|
|
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
||||||||||||
| 29.04.2023, 22:30 | ||||||||||||
|
В программе Vector06C у The Trick, в классе CTextFile.cls, есть функция IsInputTextUnicode, которая обращается к API-функции IsTextUnicode из библиотеки advapi32.dll. Так вот эта функция должна бы определять есть ли в строке уникод, но по факту получается, что если строка содержит русские символы то функция считает, что это уникод. Только если все английские то считает что это не уникод...
Вот нашёл у иностранцев код:
0
|
||||||||||||
| 30.09.2023, 08:22 | |||||||
|
Кликните здесь для просмотра всего текста
Добавлено через 5 минут Вместо lstrlen(lpStr) * 2 можно просто искать, нуль в wfd.cFileName(), но, скорее всего, lstrlen будет бытрее Добавлено через 16 минут В идеале я вижу, так, что нужно писать строки в один общий буфер (как в StringBuilder-е), периодически расширяя его большими порциями с помощью HeapReAlloc. Параллельно можно писать в строковый массив указатели с этого буфера, если нужен именно массив.
1
|
|||||||
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
||
| 30.09.2023, 08:48 | ||
|
testuser2, поковырялся в этой функции и хорошо, я рад, что тебе она понравилась, конечно же я не делал упор на оптимизацию скорости тут, что касательно массивов то для XP нужно выделять буфер скажем ну сразу на 1000 строк. Итак каждую 1000 строк например подкачивать, для семёрки это не критично, так как ReDim Preserve StrArray(cnt) каждую интерацию работает быстро в семёрке. Пропускать первые две интерации это ты конечно интересно придумал, но вдруг в первой и второй интерации не будут позиции "." и ".." с точки зрения производительности ты хоть одну миллисекунду выиграл вообще? Я считаю что If DirName <> "." And DirName <> ".." Then будет лучше.
Добавлено через 1 минуту Добавлено через 2 минуты testuser2, например, в корне диска, первые две позиции могут быть уже другими, а не "." и ".."
0
|
||
| 30.09.2023, 08:54 | ||
|
0
|
||
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
||||||
| 30.09.2023, 08:56 | ||||||
|
Кстати эта функция я знаю что она не совершенна, например она не позволяет добавлять файлы БЕЗ КАТАЛОГОВ а мне это недавно понадобилось и пришлось переписать функцию. Плюс со всеми вложенными подпапками. Плюс добавил рекурсию. Для бесконечного поиска папок и файлов ровно до тех пор пока они будут найдены.
Это мой новый шедевр гениальности моей (можешь посмотреть если интересно), тут ещё плюс даты и время файлов и их размер, недавно написал как раз новый модуль:
1
|
||||||
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
||
| 30.09.2023, 09:13 | ||
|
0
|
||
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|
| 30.09.2023, 10:12 | |
|
testuser2, ты с этими указателями не мудри
0
|
|
| 30.09.2023, 10:12 | |
|
Переименование PDF-файлов в имена, берущиеся из содержимого этих файлов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки.
Добавлено:
- Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
|
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы.
Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
|
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|