Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как копировать файлы с "неправильным" именем [D6, WinXP]


FoxikM ©   (2008-05-01 09:18:00) 

Cтолкнулся с проблемой - надо на дельфи написать программку и не получается через нее копировать файлы с недопустимыми символами в именах и из другой кодовой таблицы, например (символы с двумя точками наверху) :  
Kurtlar Vadisi Pusu 3_ Bölüm Part 5 - 9 www_vayturk_com - blog » Blog Archive.htm


Кстати через FAR тоже не получается скопировать такие файлы а Total Commander копирует, только выскакивает предупреждение что в имени файла присутствуют символы из другой кодовой страницы. Может кто знает как решить эту проблему.  Хотя бы копирование файлов с символами из другой кодовой таблицы.


Anatoly Podgoretsky   (2009-01-04 20:48:00) [1]


> надо на дельфи написать программку и не получается через
> нее копировать файлы с недопустимыми символами в именах

Это не возможно, такие имена должны преобразовываться в допустимую форму.


Psycho   (2009-01-04 17:19:00) [2]

Ну это логично, что не предназначен, ну так что использовать? Или модифицировать его?


Плохиш   (2009-01-04 16:57:00) [3]


> Psycho ©   (04.01.09 13:52) [10]
>
> А TOpenDialog

А кто сказал, что он преднозначен для работы с именами файлов в юникоде?

> sniknik ©   (01.05.08 12:54) [7]
>
>


> проще всего конечно поставить компоненты для работы с юникодом
> и работать только с ними (/ждать поддержки в дельфи/перейти
> на другой язык).
> ... правда не знаю есть в TNT перекрытые FindFirst, ...Next,
>  TSearchRec
. если нет то хотя бы на принципы работы том
> посмотри.
>

Полчаса работы, переписать их с использованием системных функций, оканчивающихся на W;-)


Psycho   (2009-01-04 13:52:00) [4]

А TOpenDialog просто заменяет у себя в Files "ö" на "o", и файл не находится. Как быть?)


Хитрий Лис   (2008-05-01 12:56:00) [5]

Упс... пока писал Николай Батькович уже ответили :)


Хитрий Лис   (2008-05-01 12:55:00) [6]

Таким образом есть два способа решения задачи:
1. Переделать (или поискать) процедуру поиска файлов для работы с юникодом.
2. Попытаться получить unicod-имя файла по ansi-имени.


sniknik   (2008-05-01 12:54:00) [7]

> Попробовал переделать:
> Resutl := CopyFileExW(PWidechar( SourceDir+ SR. Name),
>  PWidechar( TargetDir+ SR. Name), nil, nil, nil, 0);
типы, и какими функциями они туда значения получают?

> У меня такой же код не работает, где ошибка?
ошибка в том, что менять нужно не одно звено, а все при работе с юникодом. если где останется обычная(/анси) строка то не получится.

проще всего конечно поставить компоненты для работы с юникодом и работать только с ними (/ждать поддержки в дельфи/перейти на другой язык).
... правда не знаю есть в TNT перекрытые FindFirst, ...Next, TSearchRec. если нет то хотя бы на принципы работы том посмотри.


Хитрий Лис   (2008-05-01 12:47:00) [8]

Прошу прощения - не то отправил ...

Ошибка у вас вероятно в том - что вы приводите к PWideChar
Насколько я понял, SR имеет тип TSearchRec т.е. SR.Name типа AnsiString.
А для CopyFileExW иначально нужен PWideChar, поэтому посмотрите насколько корректно в вашем случае работает такое приведение типов.


FoxikM   (2008-05-01 12:26:00) [9]


> function CopyFileExA(lpExistingFileName, lpNewFileName:
> PAnsiChar;
> Resutl := CopyFileExW(PWidechar(SourceDir + SR.Name), PWidechar(TargetDir
> + SR.Name),


У меня такой же код не работает, где ошибка?


Хитрий Лис   (2008-05-01 12:16:00) [10]

function CopyFileExA(lpExistingFileName, lpNewFileName: PAnsiChar;
Resutl := CopyFileExW( PWidechar(SourceDir + SR.Name), PWidechar(TargetDir + SR.Name),


FoxikM   (2008-05-01 10:52:00) [11]


> > с недопустимыми символами в именах и из другой кодовой
> таблицы, например (символы с двумя точками наверху) :  
> это не недопустимые символы, это юникод. копировать можно
> попробовать с помощью CopyFileExW

Я и написал что копировать нужно файлы с именами с недопустимыми символами (если возможно) и с символами из другой кодовой таблицы. Но мне хотя бы с юникодом разобраться.

Был такой код:
Result := Windows.CopyFile(Pchar(SourceDir + SR.Name), Pchar(TargetDir +
 SR.Name), False);

Попробовал переделать:
Resutl := CopyFileExW(PWidechar(SourceDir + SR.Name),
 PWidechar(TargetDir + SR.Name), nil, nil, nil, 0);

Все равно не работает.


sniknik   (2008-05-01 09:50:00) [12]

> с недопустимыми символами в именах и из другой кодовой таблицы, например (символы с двумя точками наверху) :  
это не недопустимые символы, это юникод. копировать можно попробовать с помощью CopyFileExW


Ёжик   (2008-05-01 09:42:00) [13]

> FoxikM ©   (01.05.08 09:18)

А переименОвывать (какими-либо средствами) получается? :)


Наверх

Титульная страница Поиск, карта сайта Написать письмо