![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удаление файла со спец.символом в имени из Делфи [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 выбрать его, а потом удалять