Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с файлами которых имена в Unicode. [D7, 2003]


Страницы:   1 2

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 и не копирует
имя файла длинный и содержит буквы национальной кодировки


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо