Як копіювати файли з - неправильним - ім’ям

Зіткнувся з проблемою - треба на дельфі написати програму і не виходить через неї копіювати файли з неприпустимими символами в іменах та з іншої кодової таблиці, наприклад (символи з двома точками нагорі): Kurtlar Vadisi Pusu 3_ blog » Blog Archive.htm

А перейменовувати (якими-небудь засобами) виходить? :)

> з неприпустимими символами в іменах та з іншої кодової таблиці, наприклад (символи з двома точками нагорі) : це неприпустимі символи, це юнікод. копіювати можна спробувати за допомогою CopyFileExW

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

Все одно не працює.

функція CopyFileExA(lpExistingFileName, lpNewFileName:PansiChar; Resutl := CopyFileExW(PWidechar(SourceDir + SR.Name),PWidechar(TargetDir + SR.)) Name),

> функція CopyFileExA(lpExistingFileName, lpNewFileName: > PANsiChar; > Resutl := CopyFileExW(PWidechar(SourceDir + SR.Name), PWidechar(TargetDir > + SR.Name),<1

У мене такий код не працює, де помилка?

Перепрошую - чи то відправив.

Помилка у вас ймовірно в тому - що ви приводите до PWideChar Наскільки я зрозумів, SR має тип TSearchRec тобто. SR.Name типу AnsiString. А для CopyFileExW спочатку потрібен PWideChar, тому подивіться наскільки коректно у вашому випадку працює таке приведення типів.

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

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

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

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

Упс. поки писав Микола Батькович уже відповіли :)

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

Ну це логічно, що не призначено, ну так що використовувати? Чи модифікувати його?

> треба на дельфі написати програму і виходить через > її копіювати файли з недопустимими символами в іменахЦе неможливо, такі імена повинні перетворюватися на допустиму форму.