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

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

Удаление файла со спец.символом в имени из Делфи [D7, WinXP]


Кашперук Иван ©   (2006-02-28 18:20:00) 

Пытаюсь удалить файл
Пе[кракозябля]тр.xls
пробовал DeleteFile, Erase
Обе ругаются - не могу найти файл.

Как удалить?

Кракозябля - часть рамки (вертикальная и полугоризонтальная полоска), как говорит товарищ Word

PS Средствами Винды удаляется нормально!!!


vovnuke   (2006-03-01 10:16:00) [1]

Попробуй перед операциями с файлом выполнить
SetFileApisToOEM,
а после
SetFileApisToAnsi


AlexeyT   (2006-03-01 09:52:00) [2]


> TC прекрасно удаляет сию лабуду. Как - не знаю, но для него
> это не проблема.


TC удаляет файл через его _короткое_ имя (8.3). Если у файла нет короткого имени, TC его не удалит.


Германн   (2006-03-01 02:42:00) [3]

Я, конечно, "лопух", но Windows Commander ака Total Commander при мне.

2 Игорь Шевченко ©   (01.03.06 00:43) [10]
TC прекрасно удаляет сию лабуду. Как - не знаю, но для него это не проблема.


Игорь Шевченко   (2006-03-01 00:43:00) [4]

Кашперук Иван   (28.02.06 19:18) [8]

Если в имени файла есть символ Unicode, то его бесполезно передавать в ANSI-функции.


> Из Пуск->Выполнить это работает  и удаляет файл
> cmd /c del e:\Пе╡тр~WD.XLS


Диалог "Пуск|выполнить" работает с Unicode-символами.

Может быть, стоит у файла имя изменить, чтобы он создавался без неприличных символов ? Тоже,знаете ли, выход.


Кашперук Иван   (2006-02-28 19:24:00) [5]

Просто вот этот код тоже не работает - хотя по идее он сам должен был строку преобразовать в Wide

 DeleteFileW('C:\Пе¦тр~WD.XLS');


Кашперук Иван   (2006-02-28 19:18:00) [6]

а проще? я не делаю поиск - хочу просто удалить (точнее, я то делаю, и потом попробую через W - версии поиска)

Из Пуск->Выполнить это работает  и удаляет файл
cmd /c del e:\Пе╡тр~WD.XLS

а из делфи это не работате:
ShellExecute(Application.Handle, 'open', 'cmd.exe' PAnsiString('/c del ' + OpenDialog1.FileName), nil, sw_hide);

Как выбрать имя этого файла, чтоб оно не преобразовывалось в ANSI?


Crash Coredump   (2006-02-28 19:13:00) [7]

FindFirstFileW + DeleteFileW

begin...end ©   (28.02.06 19:00) [4]

После OPenDialog он уже Ansi, так что перекодировать его в Unicode бесполезно.

Проблема в том, что в имени файла есть не ANSI-символ, который после перекодировки в ANSI становится совсем не тем, который на самом деле. И после преобразования его в Unicode функцией DeleteFile его имя не такое, какое на диске.


Кашперук Иван   (2006-02-28 19:05:00) [8]

И так не удаляет.
И если заменить на DeleteFileW тоже


begin...end   (2006-02-28 19:02:00) [9]

[4] -- DeleteFile W, конечно же.


begin...end   (2006-02-28 19:00:00) [10]

DeleteFile(PWideChar( WideString(OpenDialog1.FileName )))


Кашперук Иван   (2006-02-28 18:55:00) [11]

Не работает к сожалению ни то, ни то

Вот код: (последней строкой - путь к файлу в ASCII кодах)

 if OpenDialog1.Execute then
 begin
   error := DeleteFileW(PWideChar(OpenDialog1.FileName));
 end;
 if not error then
   ShowMessage(SysErrorMessage(GetLastError));
//  ShowMessage(#99#58#92#207#229#166#242#240#126#87#68#46#88#76#83);


Crash Coredump   (2006-02-28 18:34:00) [12]

DeleteFileW


Desdechado   (2006-02-28 18:23:00) [13]

попробуй не вводить имя файла, а через OpenDialog выбрать его, а потом удалять


Наверх

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