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

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

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

Аватара для ddv122

Старожил


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


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

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


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

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

 

Аватара для ddv122

Старожил


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

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


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

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


Отправлено: 16:47, 25-02-2012 | #31



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

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


Аватара для ferget

Разный


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

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


вроде так

Код: Выделить весь код
if (DirectoryExists)
{
      //тут можно вставить проверку пустая папка или нет
      DeleteDir(ObjectName);
      RemoveDir (ObjectName);
]
Это сообщение посчитали полезным следующие участники:

Отправлено: 06:12, 26-02-2012 | #32


Аватара для ddv122

Старожил


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

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


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

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


Отправлено: 12:14, 28-02-2012 | #33


Аватара для ferget

Разный


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

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


вот собственно 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;
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:40, 28-02-2012 | #34


Аватара для ddv122

Старожил


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

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


ferget, А как их совместить теперь??

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


Отправлено: 15:42, 03-03-2012 | #35


Аватара для ferget

Разный


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

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


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

Отправлено: 15:46, 03-03-2012 | #36


Аватара для ddv122

Старожил


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

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


ferget, я пробывл ошибки только одни

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


Отправлено: 15:58, 03-03-2012 | #37


Аватара для ferget

Разный


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

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


вот так в коде у меня, удаляется папка с файлами
Код: Выделить весь код
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;
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:52, 03-03-2012 | #38


Аватара для ddv122

Старожил


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

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


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

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


Последний раз редактировалось Drongo, 06-03-2012 в 15:07. Причина: 2 в 1


Отправлено: 22:25, 05-03-2012 | #39


Аватара для ddv122

Старожил


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

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


Все доделал осталось сделать только удаление .*exe если есть одноименная скрытая папка
Цитата ferget:
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); »
Осталось сравнить их

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


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



Компьютерный форум 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




 
Переход