Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1426368587
SvetaZ1
2015-03-15 00:29
2017.01.15
вопрос по Case


4-1280829127
wikasim
2010-08-03 13:52
2017.01.15
Как узнать полное имя файла зная его краткое?


2-1424187609
TYMON
2015-02-17 18:40
2017.01.15
Технология Intraweb пустая страница при запуске


15-1453277297
Dimka Maslov
2016-01-20 11:08
2017.01.15
Немного музыки


2-1421424584
Псб
2015-01-16 19:09
2017.01.15
AV после вызова GetTempFileNameW





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский