Как да копирате файлове с грешно име
Попаднах на проблем - трябва да напиша програма в 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 и тя не работи с > няма да копира файлове с невалидни знаци в имената сиТова не е възможно, такива имена трябва да бъдат преобразувани във валидна форма.