Форум: "Начинающим";
Текущий архив: 2017.01.15;
Скачать: [xml.tar.bz2];
ВнизРабота с файлами которых имена в Unicode. Найти похожие ветки
← →
Xmen (2015-04-03 07:41) [0]Как работать с файлами которых имена в Unicode. Обычные MoveFile, CopyFile, RenameFile не работает. Через прогу TotalCommander все работает а мая прога выдаёт ошибку.
← →
MBo © (2015-04-03 08:01) [1]MoveFileW, CopyFileW и т.д. с аргументами - юникодными строками.
Или SHFileOperation.
← →
Xmen (2015-04-03 08:30) [2]
if CopyFileW(PWideChar(fname1),PWideChar(fname2),False) then ShowMessage("Файл успешно скопирован!") else ShowMessage("Ошибка! Вот ее код: "+IntToStr(GetLastError));
выдаёт ошибку 123 и не копирует
имя файла длинный и содержит буквы национальной кодировки
← →
junglecat © (2015-04-03 09:12) [3]fname1 и fname2 какого типа и как заполняются?
← →
MBo © (2015-04-03 09:20) [4]>выдаёт ошибку 123
А что это за ошибка?
GetLastError + FormatMessage
← →
junglecat © (2015-04-03 09:27) [5]invalid file name
← →
Xmen (2015-04-03 09:33) [6]>>А что это за ошибка?
123: Синтаксическая ошибка в имени файла, имени папки или метке тома.
>>fname1 и fname2 какого типа и как заполняются?
fname1, fname2:WideString;
FileInfo:TsearchRec;
...
FindFirst("*.*", faAnyFile-faDirectory, Fileinfo);
fname1:=FileInfo.Name;
fname2:="121212.txt" ;
← →
sniknik © (2015-04-03 09:39) [7]FindFirst FileInfo.Name : TFileName = type string;
← →
sniknik © (2015-04-03 09:42) [8]преобразование из юникода в национальную строку и обратно "переживет" только имя полностью из "нац.символов винды". с такими именами и простое CopyFile справилось бы.
← →
junglecat © (2015-04-03 09:47) [9]FindFirstFileW
← →
Xmen (2015-04-03 13:46) [10]>>FindFirstFileW
это для поиска а как с переименованием и копированием?
← →
Palladin © (2015-04-03 14:09) [11]ты в msdn то ходил? что написано читал?
← →
Xmen (2015-04-07 08:49) [12]Не получился решит проблему :(
← →
MBo © (2015-04-07 09:46) [13]Вот я завел файл с именем 123-abc-абв-ԵԹՅ_ฃۿ๛.txt, положил его в рабочую папку exe-шника, и делаю (XE3, юникод по умолчанию)
var
sr: TSearchRec;
begin
if FindFirst("123*.txt", faAnyFile, SR) = 0 then
if not CopyFileW(SR.FindData.cFileName, PWideChar("test.txt"), False)
then ShowMessage("Ошибка! Вот ее код: "+IntToStr(GetLastError));
И оно копируется.
Кстати, насколько длинное имя файла было? Не превышает ли длина пути 260 символов?
← →
Xmen (2015-04-07 10:24) [14]сделал так пока работает.
procedure TForm1.Button3Click(Sender: TObject);
var H: THandle;
D: TWIN32FindDataW;
FileName,NewFileName: widestring;
begin
ChDir(SendDir+"1\");
H:= FindFirstFileW("*.*",D);
repeat
if (H<>INVALID_HANDLE_VALUE) and (D.cFileName <> widestring(".")) and(D.cFileName<>widestring("..")) then
begin
FileName:=d.cFileName;
NewFileName:="d:\"+FileName;
ShowMessage(FileName);
if MoveFileW(PWideChar(FileName),PWideChar(NewFileName)) then ShowMessage("Файл перемешен")
else ShowMessage("Ошибка! Вот ее код: "+IntToStr(GetLastError)+" "+SysErrorMessage(GetLastError));
end;
until not FindNextFileW(H,D);
Windows.FindClose(H);
end;
И как определить что имя файла на юникоде?
спасибо за советы.
← →
Palladin © (2015-04-07 11:33) [15]Я тебе еще раз спрашиваю, читал ли ты msdn?
← →
Плохиш © (2015-04-08 01:38) [16]http://delphimaster.net/view/2-1336632149
← →
Плохиш © (2015-04-08 01:38) [17]http://delphimaster.net/view/2-1336632149
← →
Xmen (2015-04-08 08:16) [18]>>Я тебе еще раз спрашиваю, читал ли ты msdn?
то что выдал гугл почитал или посмотрел в спешке. Решение не нашел, наверно плохо искал или не понял.
← →
brother © (2015-04-08 08:52) [19]значит ССЗБ...
← →
junglecat © (2015-04-08 09:22) [20]> как определить что имя файла на юникоде?
а имя файла всегда на юникоде.
Функции с окончанием A перекодируют строки и вызывают аналоги с W
← →
Inovet © (2015-04-08 10:34) [21]> [18] Xmen (08.04.15 08:16)
> то что выдал гугл
Гугл - это не MSDN.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2017.01.15;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.062 c