Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.01.15;
Скачать: CL | DM;

Вниз

Работа с файлами которых имена в 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.025 c
15-1455053404
Юрий
2016-02-10 00:30
2017.01.15
С днем рождения ! 10 февраля 2016 среда


15-1456097809
Kerk
2016-02-22 02:36
2017.01.15
Работа стоя


2-1428448138
Дмитрий
2015-04-08 02:08
2017.01.15
Закладки в Word


15-1447936212
Kerk
2015-11-19 15:30
2017.01.15
Сохранение позиции и размера формы


2-1419002742
Вован Петрович
2014-12-19 18:25
2017.01.15
Локализация ПО