Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Чистка флэшки

Ответить
Настройки темы
C/C++ - Чистка флэшки

Аватара для ddv122

Старожил


Сообщения: 222
Благодарности: 19


Конфигурация

Профиль | Отправить PM | Цитировать


Всем привет. Мне нужно по средствам с++ builder написать программу, которая будет при подключении съемных устройств, в автоматическом режиме, удалять все файлы допустим *.mp3
Возможно ли это?

Отправлено: 05:44, 18-02-2012

 

Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


вот у вас есть два списка
допустим
list1 - список файлов
list2 - список папок
вот так сравниваете
Код: Выделить весь код
for(int i=0;i<list1->Count;i++)
        {
                for(int j=0;j<list2->Count;j++)
                {
                        AnsiString find = list2->Strings[j].UpperCase();
                        if(list1->Strings[i].SetLength(list1->Strings[i].Length()-4).UpperCase()==find)
                        {
                           //делаете что-нибудь (list1->Strings[i]);
                           //делаете что-нибудь (list2->Strings[j]);
                        }
                }
        }
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:44, 12-03-2012 | #41



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для ddv122

Старожил


Сообщения: 222
Благодарности: 19

Профиль | Отправить PM | Цитировать


Цитата 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
»
Беда, так он очищает Всё с AnsiString DirPath = "Edit1->Text";
Т.е все папки с диска, а не со spisok.txt

-------
Одна голова хорошо, а двух у меня нет...


Последний раз редактировалось Drongo, 14-03-2012 в 16:28. Причина: [code]


Отправлено: 11:09, 14-03-2012 | #42


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


вот полный код, удаляет только папки указанные в Spisok.txt

Код: Выделить весь код
#include <vcl.h>
#include "dstring.h"
#pragma hdrstop


#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

bool DeleteDir(AnsiString DirName);
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button1Click(TObject *Sender)
{
        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)
                {
                  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;
}
кстати, а как вы папки в Spisok.txt указываете
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:18, 14-03-2012 | #43


Аватара для ddv122

Старожил


Сообщения: 222
Благодарности: 19

Профиль | Отправить PM | Цитировать


Цитата ferget:
кстати, а как вы папки в Spisok.txt указываете »
Ну к примеру
Код: Выделить весь код
spisok.txt

Del/
111/
Путь беру с Edit1
H://

Если не указана функция

Код: Выделить весь код
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, 17-03-2012 в 14:01.


Отправлено: 23:18, 14-03-2012 | #44


Аватара для ddv122

Старожил


Сообщения: 222
Благодарности: 19

Профиль | Отправить PM | Цитировать


Не подскажите как этот код переделать для удаления папок и файлов
Код: Выделить весь код
{
AnsiString Path = Edit1->Text;
TSearchRec sear;
TStringList* ExtToDel= new TStringList();
TIniFile* Ini = new TIniFile(ExtractFilePath( Application->ExeName ) +"spisok.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);
dt = Now();// формат даты
memo->Lines->Add(DateToStr(dt) +" " + TimeToStr(dt) +" " + " - "+"Удален ярлык : "+Path+sear.Name+", размер: " +IntToStr(sear.Size)+" байт");
}
while(FindNext(sear) == 0);
}
FindClose(sear);
}
delete ExtToDel;
delete Ini;
}

-------
Одна голова хорошо, а двух у меня нет...


Отправлено: 12:20, 26-03-2012 | #45


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Цитата ddv122:
как этот код переделать для удаления папок и файлов »
в этом коде происходит поиск по расширению, а если уже указаны имена файлов и папок, то что искать?

Отправлено: 14:17, 26-03-2012 | #46


Аватара для ddv122

Старожил


Сообщения: 222
Благодарности: 19

Профиль | Отправить PM | Цитировать


ferget, просто хочется расширить функционал, что бы 3в1)Удаление по расширению, удаление папок и удаление файлов.
в файле spisok.ini
Код: Выделить весь код
[ext]
*.lnk=
*.inf=
[Files]
1.rar
2.bmp
[Folder]
del
retro=

-------
Одна голова хорошо, а двух у меня нет...


Отправлено: 15:10, 26-03-2012 | #47


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


объявляете еще два TStringList

допустим

Код: Выделить весь код
TStringList* FileToDel= new TStringList();
TStringList* FolderToDel= new TStringList();
считываете через Ini->ReadSection

и каждый список обрабатываете

Отправлено: 05:13, 27-03-2012 | #48


Аватара для ddv122

Старожил


Сообщения: 222
Благодарности: 19

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
{
AnsiString Path = Edit1->Text;
TSearchRec sear;
TStringList* ExtToDel= new TStringList();
TStringList* FileToDel= new TStringList();
TStringList* FolderToDel= new TStringList();
TIniFile* Ini = new TIniFile(ExtractFilePath( Application->ExeName ) +"spisok.ini");
Ini->ReadSection("ext", ExtToDel);
.....
Ini->ReadSection("files", FileToDel);
...........
Ini->ReadSection("Folder", FolderToDel);
}
Это я понимаю а как обработать?

-------
Одна голова хорошо, а двух у меня нет...


Отправлено: 11:57, 27-03-2012 | #49


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


например так для файлов

Код: Выделить весь код
AnsiString Path = Edit1->Text;
TSearchRec sear;
TStringList* ExtToDel= new TStringList();
TStringList* FileToDel= new TStringList();
TIniFile* Ini = new TIniFile(ExtractFilePath( Application->ExeName ) +"spisok.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);
dt = Now();// формат даты
memo->Lines->Add(DateToStr(dt) +" " + TimeToStr(dt) +" " + " - "+"Удален ярлык : "+Path+sear.Name+", размер: " +IntToStr(sear.Size)+" байт");
}
while(FindNext(sear) == 0);
}
FindClose(sear);
}
delete ExtToDel;

Ini->ReadSection("files", FileToDel);

      AnsiString ObjectName;
        for (int i =  FileToDel ->Count-1; i >= 0; i--)
        {
                ObjectName = DirPath+ FileToDel->Strings[i];
                DeleteFile (ObjectName);
        }
        delete FileToDel;

delete Ini;
и для папок аналогично

хотя лучше вынести в отдельную функцию
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:18, 27-03-2012 | #50



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Чистка флэшки

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Чистка системников stranges Прочее железо 22 14-11-2011 17:01
Разное - Чистка ОС XP inline Microsoft Windows 2000/XP 4 06-05-2011 07:11
Принтер - Чистка принтера ReAL Прочее железо 10 25-03-2011 15:31
Чистка линз crowlik Оптические приводы 18 21-04-2009 11:23
Чистка рееестра bona Программное обеспечение Windows 6 17-02-2008 05:57




 
Переход