Главная страница
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.016 c
15-1229754617
SPeller
2008-12-20 09:30
2009.02.15
Когда омона и милиции столько же, сколько митингующих


2-1230973748
studenttgata
2009-01-03 12:09
2009.02.15
Как получить относительный путь к файлу через OpenDialog?


6-1198936020
DmT
2007-12-29 16:47
2009.02.15
Отправка письма по SMTP


15-1229590921
Calligraff
2008-12-18 12:02
2009.02.15
Непонятный глюк в Delphi


4-1205362998
Jolik
2008-03-13 02:03
2009.02.15
Как узнать выполняется моя функция в основной нитке...