Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.02.15;
Скачать: CL | DM;

Вниз

Как копировать файлы с "неправильным" именем   Найти похожие ветки 

 
FoxikM ©   (2008-05-01 09:18) [0]

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


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


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

> FoxikM ©   (01.05.08 09:18)

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


 
sniknik ©   (2008-05-01 09:50) [2]

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


 
FoxikM ©   (2008-05-01 10:52) [3]


> > с недопустимыми символами в именах и из другой кодовой
> таблицы, например (символы с двумя точками наверху) :  
> это не недопустимые символы, это юникод. копировать можно
> попробовать с помощью 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);

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


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

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


 
FoxikM ©   (2008-05-01 12:26) [5]


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


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


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

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

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


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

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

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

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


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

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


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

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


 
Psycho ©   (2009-01-04 13:52) [10]

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


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


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

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

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


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

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


 
Psycho ©   (2009-01-04 17:19) [12]

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


 
Anatoly Podgoretsky ©   (2009-01-04 20:48) [13]


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

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



Страницы: 1 вся ветка

Текущий архив: 2009.02.15;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
15-1229609835
Добежал
2008-12-18 17:17
2009.02.15
Политика NT - хранить настройки программы отдельно от программы


2-1230969991
N_SSS
2009-01-03 11:06
2009.02.15
Подключение справочников (Lookup) для DbGridEh


15-1229779975
jack128_
2008-12-20 16:32
2009.02.15
Создание обеъктов в generic классах


1-1207728389
Максим
2008-04-09 12:06
2009.02.15
ciacomport


15-1229629312
DVM
2008-12-18 22:41
2009.02.15
А нет ли случаем такого готового класса?