Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Удалить директорию

295
13 января 2003 года
gray_k
356 / / 20.12.1999
Подскажите, как удалить директорию со всеми файлами в ней?
442
13 января 2003 года
HexoGenus
121 / / 20.03.2000
Цитата:
Originally posted by gray_k
Подскажите, как удалить директорию со всеми файлами в ней?



SHFILEOPSTRUCT sh;

sh.hwnd = GetSafeHwnd(); //Для BCB sh.hwnd=FormX->Handle;
sh.wFunc = FO_DELETE;
sh.pFrom = "c:\test\0";
sh.pTo = NULL;
sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
sh.hNameMappings = 0;
sh.lpszProgressTitle = NULL;

SHFileOperation (&sh);

Этот код выносит все дерево, начиная с (и включая) с: est

// Будь осторожен с этим кодом...
// Я его не проверял
// но мне очень не нравиться строчка
// sh.pFrom = "c:\test\0";
// там по идее должно быть
// sh.pFrom = "c:\\test\0";
// С уважением.
// HexoGenus.

295
14 января 2003 года
gray_k
356 / / 20.12.1999
Цитата:
Originally posted by HexoGenus


SHFILEOPSTRUCT sh;

sh.hwnd = GetSafeHwnd(); //Для BCB sh.hwnd=FormX->Handle;
sh.wFunc = FO_DELETE;
sh.pFrom = "c:\test\0";
sh.pTo = NULL;
sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
sh.hNameMappings = 0;
sh.lpszProgressTitle = NULL;

SHFileOperation (&sh);

Этот код выносит все дерево, начиная с (и включая) с: est

// Будь осторожен с этим кодом...
// Я его не проверял
// но мне очень не нравиться строчка
// sh.pFrom = "c:\test\0";
// там по идее должно быть
// sh.pFrom = "c:\\test\0";
// С уважением.
// HexoGenus.


Вот такой код работает:
SHFILEOPSTRUCT sh;

sh.hwnd = FormX->Handle;
sh.wFunc = FO_DELETE;
sh.pFrom = "c:\\test\0";
sh.pTo = NULL;
sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
sh.hNameMappings = 0;
sh.lpszProgressTitle = NULL;

SHFileOperation (&sh);
но если написать вот так:
AnsiStrimg S;
S = "c:\\test\0";
SHFILEOPSTRUCT sh;

sh.hwnd = FormX->Handle;
sh.wFunc = FO_DELETE;
sh.pFrom = S.c_str();
sh.pTo = NULL;
sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
sh.hNameMappings = 0;
sh.lpszProgressTitle = NULL;

SHFileOperation (&sh);
то выдаётся ошибка - "Не удаётся удалить файл.Не удаётся произвести чтение с файла или диска"
Причем на точке останова sh.pFrom имеет абсолютно иденитичные значения в первом и втором вариантах. Что за глюк такой?

1.8K
14 января 2003 года
ALI
129 / / 10.01.2003
Цитата:
Originally posted by gray_k

Вот такой код работает:
SHFILEOPSTRUCT sh;

sh.hwnd = FormX->Handle;
sh.wFunc = FO_DELETE;
sh.pFrom = "c:\\test\0";
sh.pTo = NULL;
sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
sh.hNameMappings = 0;
sh.lpszProgressTitle = NULL;

SHFileOperation (&sh);
но если написать вот так:
AnsiStrimg S;
S = "c:\\test\0";
SHFILEOPSTRUCT sh;

sh.hwnd = FormX->Handle;
sh.wFunc = FO_DELETE;
sh.pFrom = S.c_str();
sh.pTo = NULL;
sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
sh.hNameMappings = 0;
sh.lpszProgressTitle = NULL;

SHFileOperation (&sh);
то выдаётся ошибка - "Не удаётся удалить файл.Не удаётся произвести чтение с файла или диска"
Причем на точке останова sh.pFrom имеет абсолютно иденитичные значения в первом и втором вариантах. Что за глюк такой?




Несоответстве типов
ему надо
const char* а ты передаешь просто char *

поэтому кусок меняется так

Код:
1
AnsiString S = AnsiString("c:\\test")+" ";//удлиняем строку:)
char* c=S.c_str(); // вот тут убирался второй '\0'
c[StrLen(c)-1] ='\0';// делаем стросу double null terminated
SHFILEOPSTRUCT sh;
sh.hwnd = Form1->Handle;
sh.wFunc = FO_DELETE;
sh.pFrom =  c;
sh.pTo = NULL;
sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
sh.hNameMappings = 0;
sh.lpszProgressTitle = NULL;
SHFileOperation (&sh);
442
14 января 2003 года
HexoGenus
121 / / 20.03.2000
#include "Shellapi.h"
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString S;
S = "c:\\test\0";
S.SetLength(S.Length()+1);
// Расширяем строку так что бы 0-символ входил в нее тоже...
// Правда незнаю всегда ли после расширения последний символ будет равен 0
// У меня по крайней мере и так сработало...
// но можно на всякий случай это конкретизировать
// командой S[S.Length()]=0;
S[S.Length()]=0;
SHFILEOPSTRUCT sh;

sh.hwnd = Form1->Handle;
sh.wFunc = FO_DELETE;
sh.pFrom = S.c_str();
ShowMessage(sh.pFrom);
sh.pTo = NULL;
sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
sh.hNameMappings = 0;
sh.lpszProgressTitle = NULL;

SHFileOperation (&sh);

}
295
14 января 2003 года
gray_k
356 / / 20.12.1999
Цитата:
Originally posted by ALI



Несоответстве типов
ему надо
const char* а ты передаешь просто char *

поэтому кусок меняется так

Код:
1
AnsiString S = AnsiString("c:\\test")+" ";//удлиняем строку:)
char* c=S.c_str(); // вот тут убирался второй '\0'
c[StrLen(c)-1] ='\0';// делаем стросу double null terminated
SHFILEOPSTRUCT sh;
sh.hwnd = Form1->Handle;
sh.wFunc = FO_DELETE;
sh.pFrom =  c;
sh.pTo = NULL;
sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
sh.hNameMappings = 0;
sh.lpszProgressTitle = NULL;
SHFileOperation (&sh);



Спасибо, работает.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог