Страница 1 из 1

Идентификация записей на диске с названием в Юникоде

Добавлено: 11 Июль 2024, 17:17
NewUser
Всем привет!
Как решить следующую задачу?
На диске имеются файлы, в том числе, с названиями в юникоде. Которые средой Клариона или переводятся в похоже-подходящие символы или заменяются знаками вопроса, например, для иероглифов. В любом из этих случаев, после того, как файлы в папке отсканированы оператором Directory, программа не может обратиться к ним для манипуляций.
Приходилось ли кому решать данную задачу и каковы методы её решения?
Интуитивно на ум приходит идея считывать каким-то образом идентификаторы этих файлов во внутренней среде Windows (если таковы там имеются) и прописывать их в таблицу БД.

Идентификация записей на диске с названием в Юникоде

Добавлено: 11 Июль 2024, 17:31
Дед Пахом
Я бы посмотрел в сторону FindFirstFile/FindNextFile api: https://learn.microsoft.com/en-us/windo ... -directory.

Идентификация записей на диске с названием в Юникоде

Добавлено: 11 Июль 2024, 18:38
NewUser
Спасибо за быстрый отклик!
Никогда не сталкивался с данными функциями. Но судя по названию и описанию, даже не знаю, как их приложить к решению обозначенной задачи.
Например, функция FindFirstFileA: Выполняет поиск в каталоге файла или подкаталога с именем, совпадающим с определенным именем (или частью имени, если используются подстановочные знаки). Открывает дескриптор поиска и возвращает информацию о первом файле, который находит файловая система с именем, соответствующим указанному шаблону.
А если в базе данных нет (релевантного) имени, по которому можно производить поиск. Вместо имени - одни знаки вопросов?!
Неужто сработает? Имеются ли у кого положительное решение озвученной задачи рассматриваемым методом?

Идентификация записей на диске с названием в Юникоде

Добавлено: 11 Июль 2024, 18:46
Дед Пахом
Эти функции могут заменить кларионовский DIRECTORY там, где он не работает. Не понял, причём тут база данных.

Идентификация записей на диске с названием в Юникоде

Добавлено: 11 Июль 2024, 18:55
NewUser
Дед Пахом писал(а): 11 Июль 2024, 18:46 Не понял, причём тут база данных.
В БД хранятся наименования (с расширениями) файлов из директории. По этим наименованиям и должен программой производиться поиск файлов и манипуляции с ними (редактирование наименования, удаление, запуск на исполнение).
То есть, БД - это, в первую очередь, своеобразный каталог имеющихся файлов на диске.

Идентификация записей на диске с названием в Юникоде

Добавлено: 11 Июль 2024, 18:57
Дед Пахом
Ну если у Вас в бд вместо имён файлов знаки вопроса, то у меня плохие новости.

Идентификация записей на диске с названием в Юникоде

Добавлено: 11 Июль 2024, 19:04
NewUser
Дед Пахом писал(а): 11 Июль 2024, 18:57 то у меня плохие новости.
С этими плохими новостями пытаюсь как-то сжиться, параллельно ища возможности локального преодоления данного ограничения, накладываемого Кларион.
Тема проблемы юникода в Кларе древняя как и сам Кларион, поэтому и подумалось, что кто-то уже к этому моменту придумал "волшебный" костыль!

Идентификация записей на диске с названием в Юникоде

Добавлено: 12 Июль 2024, 12:06
Игорь Столяров
NewUser писал(а): 11 Июль 2024, 19:04 Тема проблемы юникода в Кларе древняя как и сам Кларион
Это не проблема и решение известно и опубликовано в самом Clarion.
Например, проверка наличия файла с таким именем на диске - см. метод FileExists() в файле CWUTIL.CLW

Вам абсолютно верно рекомендовали получить список таких имён через Windows API,
и на ClaHUB есть информация, например https://clarionhub.com/t/win32-api-find ... er/5585/11

Вообще имена в юникоде - это тема серверов UNIX (например обмен с FTP сервисом) и т.д. ;)