|
7 / 7 / 0
Регистрация: 21.12.2016
Сообщений: 152
|
||||||
FindFirstFile не корректно определяет имена файлов с диакритическими знаками18.04.2023, 21:49. Показов 4913. Ответов 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
|
|
|
Вернулся
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,799
|
||
| 23.04.2023, 18:41 | ||
|
0
|
||
|
Вернулся
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,799
|
||
| 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
|
|
|
Вернулся
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,799
|
|
| 27.04.2023, 12:07 | |
|
0
|
|
|
Вернулся
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,799
|
||||||||||||
| 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
|
|||||||
|
Вернулся
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,799
|
||
| 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
|
||
|
Вернулся
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,799
|
||||||
| 30.09.2023, 08:56 | ||||||
|
Кстати эта функция я знаю что она не совершенна, например она не позволяет добавлять файлы БЕЗ КАТАЛОГОВ а мне это недавно понадобилось и пришлось переписать функцию. Плюс со всеми вложенными подпапками. Плюс добавил рекурсию. Для бесконечного поиска папок и файлов ровно до тех пор пока они будут найдены.
Это мой новый шедевр гениальности моей (можешь посмотреть если интересно), тут ещё плюс даты и время файлов и их размер, недавно написал как раз новый модуль:
1
|
||||||
|
Вернулся
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,799
|
||
| 30.09.2023, 09:13 | ||
|
0
|
||
|
Вернулся
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,799
|
|
| 30.09.2023, 10:12 | |
|
testuser2, ты с этими указателями не мудри
0
|
|
| 30.09.2023, 10:12 | |
|
Переименование PDF-файлов в имена, берущиеся из содержимого этих файлов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы
## О чём эта статья
В процессе построения ОДУ-модели (система дифференциальных. . .
|
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет)
Содержание проекта
Симуляция вековой (50 лет) экологической сукцессии в почве леса
Основные участники: АМ-гриб, ЭКМ-гриб,. . .
|
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов
Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
|
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация
В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
|
|
Сукцессия 20. Война автоботов. Делаем ставки. Лёд против "пш-пш!".
anaschu 11.07.2026
Битва ИИ в ризосфере: Как мы скрестили жесткие ОДУ, закон Фика и «подземный шантаж»
Уважаемые коллеги!
Хочу поделиться уникальным опытом ведения междисциплинарной компьютерной разработки. Прямо. . .
|
Сукцессия 19. Какие выводы я сделал из модели? Часть 2.Внутримикоризный стехиометрический буфер и хроно-дискретные зоны экспансии
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы
Математический аппарат моделирования
|
Сукцессия 18. Какие выводы я сделал из войны грибов с деревьями? Часть 1- рассказ и немного про термины
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы
Математический аппарат моделирования
Система ОДУ описывает динамику изменения массы различных компонентов системы во времени. Ключевой. . .
|
Просветление в 5 секунд
kumehtar 10.07.2026
Андрей Веретенников выдал фразу недавно: "Вам не обязательно кем-то себя считать"
|