Главная страница
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.021 c
1-1340491010
Dimka Maslov
2012-06-24 02:36
2017.01.15
Службы и иже с ними


3-1308469793
she-wolf2829
2011-06-19 11:49
2017.01.15
запуск хранимых процедур


15-1450710851
kapwell
2015-12-21 18:14
2017.01.15
работа на делфи


2-1425123097
SergP
2015-02-28 14:31
2017.01.15
Наследники абстрактных классов


15-1455575233
KilkennyCat
2016-02-16 01:27
2017.01.15
"Пример" программирования логических операций...