![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с файлами которых имена в Unicode. [D7, 2003]
Xmen © (2015-04-03 07:41:00)Как работать с файлами которых имена в Unicode. Обычные MoveFile, CopyFile, RenameFile не работает. Через прогу TotalCommander все работает а мая прога выдаёт ошибку.
Inovet (2015-04-08 10:34:00) [1]> [18] Xmen (08.04.15 08:16)
> то что выдал гугл
Гугл - это не MSDN.
junglecat (2015-04-08 09:22:00) [2]> как определить что имя файла на юникоде?
а имя файла всегда на юникоде.
Функции с окончанием A перекодируют строки и вызывают аналоги с W
brother (2015-04-08 08:52:00) [3]значит ССЗБ...
Xmen (2015-04-08 08:16:00) [4]>>Я тебе еще раз спрашиваю, читал ли ты msdn?
то что выдал гугл почитал или посмотрел в спешке. Решение не нашел, наверно плохо искал или не понял.
Плохиш (2015-04-08 01:38:00) [5]http://delphimaster.net/view/2-1336632149
Плохиш (2015-04-08 01:38:00) [6]http://delphimaster.net/view/2-1336632149
Palladin (2015-04-07 11:33:00) [7]Я тебе еще раз спрашиваю, читал ли ты msdn?
Xmen (2015-04-07 10:24:00) [8]сделал так пока работает.
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;
И как определить что имя файла на юникоде?
спасибо за советы.
MBo (2015-04-07 09:46:00) [9]Вот я завел файл с именем 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 08:49:00) [10]Не получился решит проблему :(
Palladin (2015-04-03 14:09:00) [11]ты в msdn то ходил? что написано читал?
Xmen (2015-04-03 13:46:00) [12]>>FindFirstFileW
это для поиска а как с переименованием и копированием?
junglecat (2015-04-03 09:47:00) [13]FindFirstFileW
sniknik (2015-04-03 09:42:00) [14]преобразование из юникода в национальную строку и обратно "переживет" только имя полностью из "нац.символов винды". с такими именами и простое CopyFile справилось бы.
sniknik (2015-04-03 09:39:00) [15]FindFirst FileInfo.Name : TFileName = type string;
Xmen (2015-04-03 09:33:00) [16]>>А что это за ошибка?
123: Синтаксическая ошибка в имени файла, имени папки или метке тома.
>>fname1 и fname2 какого типа и как заполняются?
fname1, fname2:WideString;
FileInfo:TsearchRec;
...
FindFirst('*.*', faAnyFile-faDirectory, Fileinfo);
fname1:=FileInfo.Name;
fname2:='121212.txt' ;
junglecat (2015-04-03 09:27:00) [17]invalid file name
MBo (2015-04-03 09:20:00) [18]>выдаёт ошибку 123
А что это за ошибка?
GetLastError + FormatMessage
junglecat (2015-04-03 09:12:00) [19]fname1 и fname2 какого типа и как заполняются?
Xmen (2015-04-03 08:30:00) [20]
if CopyFileW(PWideChar(fname1),PWideChar(fname2),False) then ShowMessage('Файл успешно скопирован!') else ShowMessage('Ошибка! Вот ее код: '+IntToStr(GetLastError));
выдаёт ошибку 123 и не копирует
имя файла длинный и содержит буквы национальной кодировки