Показать полную графическую версию : Чистка флэшки
if(FindFirst(Path +"\\"+ ExtToDel->Strings[i], faAnyFile, sear) == 0)
ferget, все равно не работает,
AnsiString Path = Edit1->Text;
Путь вида там: F://
Путь вида там: F:// »
путь должен быть F:\\
и тогда
if(FindFirst(Path + ExtToDel->Strings[i], faAnyFile, sear) == 0)
путь должен быть F:\\ »
просто если использовать этот код
AnsiString DirPath = Edit1->Text;
TStringList* ToDel = new TStringList();
ToDel->LoadFromFile("Spisok.txt");
AnsiString ObjectName;
for (int i = ToDel ->Count-1; i >= 0; i--)
{
ObjectName = DirPath+ToDel->Strings[i];
if (DirectoryExists)
RemoveDir (ObjectName);
(FileExists);
DeleteFile (ObjectName);
}
delete ToDel;
Путь вида F:// в этом коде работает
путь должен быть F:\\
»
Я и так пробовал , но не чего не удаляет
проверил
вот код
TSearchRec sear;
TStringList* ExtToDel= new TStringList();
AnsiString Path = Edit1->Text;
TIniFile* Ini = new TIniFile(ExtractFilePath( Application->ExeName ) +"spissok.ini");
Ini->ReadSection("ext", ExtToDel);
for (int i = ExtToDel ->Count-1; i >= 0; i--)
{
if(FindFirst(Path + ExtToDel->Strings[i], faAnyFile, sear) == 0)
{
do
{
DeleteFile(Path+"\\"+sear.Name);
}
while(FindNext(sear) == 0);
}
FindClose(sear);
}
delete ExtToDel;
delete Ini;
все удаляет
ferget, Спасибо большое!!!Все удаляет ,нужно было добавить IniFile* Ini = new TIniFile(ExtractFilePath( Application->ExeName ) +"spisok.ini");
А еще не подскажите, как сделать лог работы удаления?
к примеру в memo
21.02.2012 21:25:03 - удалено F:\autorun.inf, размер: 0 б
И ещё раз спасибо!Что бы я без вас делал.
FileNoExt = Copy(sear.Name, 1, length(sear.Name) - length(Extension)); »
[C++ Error] Unit1.cpp(30): E2268 Call to undefined function 'Copy'
Не где о этой функии не чего в интернете не нашел
ошибочка вышла
FileNoExt = ChangeFileExt( sear.Name, " " );
FileNoExt = ChangeFileExt( sear.Name, " " ); »
мы получаем полное имя файла, а нам нужно без расширения
Вот поиск папок
AnsiString Path = Edit1->Text;
TSearchRec sear;
TSearchRec SR;
if (FindFirst(Path +"\*.*", faDirectory, SR) == 0) {
do {
if (SR.Attr == faDirectory)
memo->Lines->Add("Ïàïêà :"+ SR.Name);
} while (FindNext(SR) == 0);
FindClose(SR);
}
}
мы получаем полное имя файла, а нам нужно без расширения »
так и получаем без расширения
вот проверил
TSearchRec sear;
AnsiString FileNoExt;
AnsiString Path="E:\\Books\\Test\\ForBuilder\\temp";
if(FindFirst(Path +"\\"+ "*.txt", faAnyFile, sear) == 0)
{
do
{
FileNoExt = ChangeFileExt( sear.Name, " " );
LogMemo->Lines->Add(FileNoExt);
}
while(FindNext(sear) == 0);
}
FindClose(sear);
{
AnsiString DirPath = Edit1->Text;
TStringList* ToDel = new TStringList();
ToDel->LoadFromFile("Spisok.txt");
AnsiString ObjectName;
for (int i = ToDel ->Count-1; i >= 0; i--)
{
ObjectName = DirPath+ToDel->Strings[i];
if (DirectoryExists)
RemoveDir (ObjectName);
(FileExists);
DeleteFile (ObjectName);
}
delete ToDel;
} »
У меня проблема в этом коде не удалят папку если в нем есть файлы, помогите исправить
вроде так
if (DirectoryExists)
{
//тут можно вставить проверку пустая папка или нет
DeleteDir(ObjectName);
RemoveDir (ObjectName);
]
ferget, [C++ Error] Unit1.cpp(152): E2268 Call to undefined function 'DeleteDir'
Ошибка, мне нужно удалять папку со всем содержимым(не зависимо пуста она или нет)
вот собственно DeleteDir
bool DeleteDir(AnsiString DirName)
{
TSearchRec sr;
if (DirName.Length())
{
if (!FindFirst(DirName+"\\*.*",faAnyFile,sr))
do
{
if (!(sr.Name=="." || sr.Name==".."))
if (((sr.Attr & faDirectory) == faDirectory ) || (sr.Attr == faDirectory))
{
FileSetAttr(DirName+"\\"+sr.Name, faDirectory );
DeleteDir(DirName+"\\"+sr.Name);
RemoveDir(DirName + "\\"+sr.Name);
}
else
{
FileSetAttr(DirName+"\\"+sr.Name, 0);
DeleteFile(DirName+"\\"+sr.Name);
}
while (!FindNext(sr));
FindClose(sr);
}
RemoveDir(DirName);
return true;
}
ferget, А как их совместить теперь??
вставьте функцию DeleteDir в файл перед вызовом
ferget, я пробывл ошибки только одни
вот так в коде у меня, удаляется папка с файлами
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString DirPath = "";
TStringList* ToDel = new TStringList();
ToDel->LoadFromFile("Spisok.txt");
AnsiString ObjectName;
for (int i = ToDel ->Count-1; i >= 0; i--)
{
ObjectName = DirPath+ToDel->Strings[i];
if (DirectoryExists)
{
DeleteDir(ObjectName);
RemoveDir (ObjectName);
}else
(FileExists);
DeleteFile (ObjectName);
}
delete ToDel;
}
//---------------------------------------------------------------------------
bool DeleteDir(AnsiString DirName)
{
TSearchRec sr;
if (DirName.Length())
{
if (!FindFirst(DirName+"\\*.*",faAnyFile,sr))
do
{
if (!(sr.Name=="." || sr.Name==".."))
if (((sr.Attr & faDirectory) == faDirectory ) ||
(sr.Attr == faDirectory))// найдена папка
{
FileSetAttr(DirName+"\\"+sr.Name, faDirectory );
DeleteDir(DirName+"\\"+sr.Name);
RemoveDir(DirName + "\\"+sr.Name);
}
else
{
FileSetAttr(DirName+"\\"+sr.Name, 0);
DeleteFile(DirName+"\\"+sr.Name);
}
}
while (!FindNext(sr));
FindClose(sr);
}
RemoveDir(DirName);
return true;
}
ferget, спасибо), разобрался, нужно функцию было в начале программы и всё было бы ок),осталось сделать отчет по удаляемых файлов
if (DirectoryExists)
{
DeleteDir(ObjectName);
RemoveDir (ObjectName);
memo->Lines->Add("Удален "+ ObjectName);
}
Но так выводит список всех файлов или 1 по списку но не как не удаляемого, как исправить как сделать отчет?
void __fastcall TForm1::WMDeviceChange(TMessage& Message)
в AnsiString disk в disk я получаю букву диска в правильном формате(F://) в автоматическом режиме при подключении флэшки
есть на форме где то 5 button в везде у них в начале указывалось так
AnsiString DirPath = Edit1->Text, FilePath;
Раньше я брал буквы дисков с Edit1
Но это не функционально, если подключаешь сразу несколько флэшек, а сейчас хочется это автоматизировать,но не загружая код, реально ли?
Все доделал осталось сделать только удаление .*exe если есть одноименная скрытая папка
TSearchRec sear;
AnsiString FileNoExt;
AnsiString Path="E:\\Books\\Test\\ForBuilder\\temp";
if(FindFirst(Path +"\\"+ "*.txt", faAnyFile, sear) == 0)
{
do
{
FileNoExt = ChangeFileExt( sear.Name, " " );
LogMemo->Lines->Add(FileNoExt);
}
while(FindNext(sear) == 0);
}
FindClose(sear); »
Осталось сравнить их
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.