Як копіювати файли з - неправильним - ім’ям
Зіткнувся з проблемою - треба на дельфі написати програму і не виходить через неї копіювати файли з неприпустимими символами в іменах та з іншої кодової таблиці, наприклад (символи з двома точками нагорі): 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", і файл не знаходиться. Як бути?)
Ну це логічно, що не призначено, ну так що використовувати? Чи модифікувати його?
> треба на дельфі написати програму і виходить через > її копіювати файли з недопустимими символами в іменахЦе неможливо, такі імена повинні перетворюватися на допустиму форму.