Войти

Показать полную графическую версию : Чистка флэшки


Страниц : 1 [2] 3 4

ferget
21-02-2012, 20:42
if(FindFirst(Path +"\\"+ ExtToDel->Strings[i], faAnyFile, sear) == 0)

ddv122
21-02-2012, 20:51
ferget, все равно не работает,
AnsiString Path = Edit1->Text;
Путь вида там: F://

ferget
21-02-2012, 20:55
Путь вида там: F:// »
путь должен быть F:\\
и тогда
if(FindFirst(Path + ExtToDel->Strings[i], faAnyFile, sear) == 0)

ddv122
21-02-2012, 21:00
путь должен быть 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:\\
»
Я и так пробовал , но не чего не удаляет

ferget
21-02-2012, 21:17
проверил

вот код


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;


все удаляет

ddv122
21-02-2012, 21:26
ferget, Спасибо большое!!!Все удаляет ,нужно было добавить IniFile* Ini = new TIniFile(ExtractFilePath( Application->ExeName ) +"spisok.ini");
А еще не подскажите, как сделать лог работы удаления?
к примеру в memo
21.02.2012 21:25:03 - удалено F:\autorun.inf, размер: 0 б
И ещё раз спасибо!Что бы я без вас делал.

ddv122
21-02-2012, 22:21
FileNoExt = Copy(sear.Name, 1, length(sear.Name) - length(Extension)); »
[C++ Error] Unit1.cpp(30): E2268 Call to undefined function 'Copy'
Не где о этой функии не чего в интернете не нашел

ferget
22-02-2012, 00:20
ошибочка вышла


FileNoExt = ChangeFileExt( sear.Name, " " );

ddv122
22-02-2012, 00:48
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);
}
}

ferget
22-02-2012, 02:06
мы получаем полное имя файла, а нам нужно без расширения »

так и получаем без расширения
вот проверил

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);

ddv122
25-02-2012, 16:47
{
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;
} »
У меня проблема в этом коде не удалят папку если в нем есть файлы, помогите исправить

ferget
26-02-2012, 06:12
вроде так


if (DirectoryExists)
{
//тут можно вставить проверку пустая папка или нет
DeleteDir(ObjectName);
RemoveDir (ObjectName);
]

ddv122
28-02-2012, 12:14
ferget, [C++ Error] Unit1.cpp(152): E2268 Call to undefined function 'DeleteDir'
Ошибка, мне нужно удалять папку со всем содержимым(не зависимо пуста она или нет)

ferget
28-02-2012, 21:40
вот собственно 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;
}

ddv122
03-03-2012, 15:42
ferget, А как их совместить теперь??

ferget
03-03-2012, 15:46
вставьте функцию DeleteDir в файл перед вызовом

ddv122
03-03-2012, 15:58
ferget, я пробывл ошибки только одни

ferget
03-03-2012, 17:52
вот так в коде у меня, удаляется папка с файлами

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;
}

ddv122
05-03-2012, 22:25
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
Но это не функционально, если подключаешь сразу несколько флэшек, а сейчас хочется это автоматизировать,но не загружая код, реально ли?

ddv122
11-03-2012, 20:09
Все доделал осталось сделать только удаление .*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