Как да копирате файлове с грешно име

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

И да се преименува (по всякакъв начин) се оказва? :)

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

> > с невалидни знаци в имената и от други > таблици, например (знаци с две точки в горната част): > те не са невалидни знаци, те са уникод. можете да копирате > опитайте с CopyFileExWНаписах, че трябва да копирате файлове с имена с невалидни знаци (ако е възможно) и със знаци от друга кодова таблица. Но за мен поне да разбирам с Unicode.

Имаше този код: Резултат := 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),

Кодът ми не работи, къде е грешката?

Съжалявам - изпратих го грешно.

Вашата грешка вероятно е, че кастингате към PWideChar Доколкото разбирам, SR е от тип TSearchRec, т.е. SR.Име на тип AnsiString. А за CopyFileExW първоначално е необходим PWideChar, така че вижте колко правилно работи такова преобразуване на типове във вашия случай.

> Опитах да повторя: > Resutl := CopyFileExW(PWidechar(SourceDir+ SR.Name), > PWidechar(TargetDir+ SR.Name), нула, нула, нула, 0); типове и чрез какви функции те получават стойности там?

> Същият код не работи при мен, къде е грешката? Грешката е, че трябва да промените не една връзка, а всички, когато работите с unicode. ако остане обичайният (/ansi) ред, тогава няма да работи.

Разбира се, най-лесният начин е да инсталирате компоненти за работа с Unicode и да работите само с тях (/изчакайте поддръжка в Delphi/превключете на друг език). . Наистина не знам дали TNT е припокрил FindFirst, . След това TSearchRec. ако не, то поне погледнете принципите на работа.

Следователно има два начина за решаване на проблема: 1. Променете (или потърсете) процедурата за намиране на файлове за работа с Unicode. 2. Опитайте се да получите името на файла в unicode от името на файла ansi.

опа докато пише Николай Баткович вече отговори :)

И TOpenDialog просто заменя "ö" с "o" в своите файлове и файлът не е намерен. Как да бъда?)

Е, логично е да не е предвидено, така че какво да използвам? Или да го промените?

> Трябва да напиша програма в Delphi и тя не работи с > няма да копира файлове с невалидни знаци в имената сиТова не е възможно, такива имена трябва да бъдат преобразувани във валидна форма.