Прочитать имя файла с Unicode-символами | |
---|---|
Nick_nsk Сообщений: 33 Дата регистрации: 20.10.2006 |
Простейшая задача - получить список файлов в каталоге и его обработать.
Проблема: в именах файлов встречаются Unicode - символы: после ADIR вместо Nohr.txt (второй знак - греческое "o", перечеркнутое) я вижу Nohr.txt с обычным ASCII символом "o" Естественно, при попытке обращения к файлу получаю ошибку. Можно их переименовать, но как получить правильную текстовую строку, чтобы в дальнейшем с помощью
переименовать в обычный ASCII |
Re: Прочитать имя файла с Unicode-символами | |
---|---|
Влад Колосов Сообщений: 22664 Откуда: Ростов-на-Дону Дата регистрации: 05.05.2005 |
Рекурсивный просмотр папок с помщью FSO
------------------ Совершенство - это не тогда, когда нельзя ничего прибавить, а тогда, когда нечего убавить. |
Re: Прочитать имя файла с Unicode-символами | |
---|---|
Nick_nsk Сообщений: 33 Дата регистрации: 20.10.2006 |
Влад, спасибо!
Проверяю. До понедельника отбыл на дачу, о результатах сообщу. |
Re: Прочитать имя файла с Unicode-символами | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
А что там должно в итоге получаться? Что-то этот пример вообще ничего не показывает. Ты его сам пробовал с юникод-именами? Специально вот создал файл с юникод-именем, кинул в папку с нормальными файлами, запустил этот код, только он сразу же и завершается без всяких циклов. Хотя так по идее что-то такое через FSO конечно же и возможно. Из любопытства незадолго перед тем попробовал другой вариант, мелькнула такая идея - переименовать все в 8-dos имена через xcopy. Так там все получается вроде и нормально для фокса. Но как-то оно не так красиво как с FSO. Само собой с ним было бы интереснее сделать. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) |
Re: Прочитать имя файла с Unicode-символами | |
---|---|
Влад Колосов Сообщений: 22664 Откуда: Ростов-на-Дону Дата регистрации: 05.05.2005 |
Я не совсем понимаю, откуда в именах берется юникод... Может так вообще нельзя делать.
------------------ Совершенство - это не тогда, когда нельзя ничего прибавить, а тогда, когда нечего убавить. |
Re: Прочитать имя файла с Unicode-символами | |
---|---|
Nick_nsk Сообщений: 33 Дата регистрации: 20.10.2006 |
Файлы с юникодом берутся пользователями с И-нета, качаются с итальянских, греческих и пр.сайтов. Спокойно выкладываются в каталоги, открываются, переименовываются explorer-ом, копируются и т.д. Объяснить пользователям почему они неправильные сложно. Некоторые символы выглядят вполне безобидно, как asci знак+кавычка.
Проверил: Для эксперимента упростил код: Проверяю наличие единственного файла в каталоге c:\temp Получаем 'нет файла ...' Тестируемый файл нулевой длинны (на всякий случай завернул в архив, чтобы юникод имя сохранилось) прилагается. Если второй знак имени файла изменить на ASCII, сразу получим сообщение 'Есть файл '
В принципе, именно то, что FileExists (и обычный File() после ADIR) его не обнаруживает, и является признаком того, что с именем файла непорядок. А дальше, действительно, попробовать переименовать через 8-dos имена |
Re: Прочитать имя файла с Unicode-символами | |
---|---|
technik Автор Сообщений: 264 Откуда: С-Петербург Дата регистрации: 15.11.2006 |
А если так
|
Re: Прочитать имя файла с Unicode-символами | |
---|---|
Nick_nsk Сообщений: 33 Дата регистрации: 20.10.2006 |
В коде
+ oFile.ShortName излишне, oFile.ShortPath уже содержит имя файла Проверил - то же самое. Видит ТОЛЬКО ASCII имена файлов, как только вставляю с Юникод знаком - "нет файла..." Полный тест процедуры:
|
Re: Прочитать имя файла с Unicode-символами | |
---|---|
technik Автор Сообщений: 264 Откуда: С-Петербург Дата регистрации: 15.11.2006 |
Мне кажется, что здесь преобразования завязаны на системные настройки языков и кодовых страниц систеиы. См. Язык и региональные стандарты->языки/дополнительно. Возможно нужно включить тексовые службы для восточных языков
Или установить MUI Исправлено 1 раз(а). Последнее : technik, 06.07.09 15:39 |
Re: Прочитать имя файла с Unicode-символами | |
---|---|
leonid Сообщений: 3204 Откуда: Рига Дата регистрации: 03.02.2006 |
Чтобы получить имена файлов в уникоде можно воспользоваться функциями FindFirstFileW и FindNextFileW (см. MSDN)
|
Re: Прочитать имя файла с Unicode-символами | |
---|---|
technik Автор Сообщений: 264 Откуда: С-Петербург Дата регистрации: 15.11.2006 |
Это понятно, что средствами winapi это возможно. А как заставить работать системные com-объекты: FSO,WMI, wshell и др. где есть доступ к файловой системе. Или они в зависимости от региона/windows имеют разную реализацию? Или нужно играться командами sys()-3101,3004-3006 или COMPROP(,"UTF8",1). Имя файла получили, но его обратно нужно передавать - опять winapi unicode? |
Re: Прочитать имя файла с Unicode-символами | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
ADIR() видит по короткому имени (если в качестве шаблона его дать). Также filetostr() может прочитать. FILE() не видит, COPY/RENAME/DELETE FILE так-же по короткому имени не работают...
Банальное
P.S. Стараюсь не иметь дела с такими файлами (переименовываю их), т.к. Юникодовский FAR пока не стабилен, а "старый" 1.70 тоже имеет существенные проблемы с такими именами. Некоторые архиваторы из "старых" тоже не жалуют юникод. ------------------ WBR, Igor |
Re: Прочитать имя файла с Unicode-символами | |
---|---|
technik Автор Сообщений: 264 Откуда: С-Петербург Дата регистрации: 15.11.2006 |
В привиденном ниже примере файл находиться в 4х из шести методов. Т.е. ADIR() и sys(2000) по короткому пути и FSO.FileExists() как по короткому так и по полному. Если COMPROP() убрать, то только по короткому
Исправлено 2 раз(а). Последнее : technik, 06.07.09 19:00 |
Re: Прочитать имя файла с Unicode-символами | |
---|---|
Nick_nsk Сообщений: 33 Дата регистрации: 20.10.2006 |
2 technik
Спасибо большое! Файлы видны, значит доступны для переименования. Очень помогли! |
© 2000-2024 Fox Club  |