Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.02.15;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.007 c
2-1230562532
Artem
2008-12-29 17:55
2009.02.15
Место для процедур


3-1210757433
tommy
2008-05-14 13:30
2009.02.15
Что предпочесть Postgresql, MSDE, SQL, MySQL


2-1231149365
Iriss
2009-01-05 12:56
2009.02.15
не отображается в трее


2-1231239884
Alex_00h
2009-01-06 14:04
2009.02.15
Значения группе элементов в цикле


2-1231237384
RUBEY
2009-01-06 13:23
2009.02.15
Ошибка в коде отправки почты





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский