|
7 / 7 / 0
Регистрация: 21.12.2016
Сообщений: 152
|
||||||
FindFirstFile не корректно определяет имена файлов с диакритическими знаками18.04.2023, 21:49. Показов 4894. Ответов 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
|
|
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
||
| 23.04.2023, 18:41 | ||
|
0
|
||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
||
| 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
|
|
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 27.04.2023, 12:07 | |
|
0
|
|
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
||||||||||||
| 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
|
|||||||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
||
| 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
|
||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
||||||
| 30.09.2023, 08:56 | ||||||
|
Кстати эта функция я знаю что она не совершенна, например она не позволяет добавлять файлы БЕЗ КАТАЛОГОВ а мне это недавно понадобилось и пришлось переписать функцию. Плюс со всеми вложенными подпапками. Плюс добавил рекурсию. Для бесконечного поиска папок и файлов ровно до тех пор пока они будут найдены.
Это мой новый шедевр гениальности моей (можешь посмотреть если интересно), тут ещё плюс даты и время файлов и их размер, недавно написал как раз новый модуль:
1
|
||||||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
||
| 30.09.2023, 09:13 | ||
|
0
|
||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 30.09.2023, 10:12 | |
|
testuser2, ты с этими указателями не мудри
0
|
|
| 30.09.2023, 10:12 | |
|
Переименование PDF-файлов в имена, берущиеся из содержимого этих файлов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы
Всем привет! Хочу поделиться свежим (и довольно. . .
|
|
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
|
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения:
- добавлена многоязычность
- добавлено снятие скриншотов
- добавлено поддержание бафов хождения по воде (для жреца, дк и шамана)
- и так, по. . .
|
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу)))
Критические ошибки, мешающие компиляции и. . .
|
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата)
Этот документ предназначен для того, чтобы новый чат Claude мог продолжить
работу без необходимости заново разбираться в. . .
|