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

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

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

Аватара для ddv122

Старожил


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


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

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


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

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

 

Аватара для ddv122

Старожил


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

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


Цитата ferget:
например так для файлов »
а можно как либо без
Цитата ferget:
AnsiString ObjectName; »
Что бы сделать отчет как сдесь

Код: Выделить весь код
memo->Lines->Add(DateToStr(dt) +" " + TimeToStr(dt) +" " + " - "+"Удален ярлык : "+Path+sear.Name+", размер: " +IntToStr(sear.Size)+" байт");

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


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



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

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


Аватара для ferget

Разный


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

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


путь и имя и так в ObjectName

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

Код: Выделить весь код
long getFileSize(const AnsiString &Filename)
{
   long ret = -1;

   HANDLE hFile = CreateFile(Filename.c_str(), GENERIC_READ,
   FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
   if( hFile != INVALID_HANDLE_VALUE )
  {
      ret = GetFileSize(hFile, NULL);
      CloseHandle(hFile);
  }
   return ret;
}
то есть


Код: Выделить весь код
for (int i =  FileToDel ->Count-1; i >= 0; i--)
        {
                ObjectName = DirPath+ FileToDel->Strings[i];
                long size= long getFileSize(&ObjectName );
                DeleteFile (ObjectName);
                ...................................................................
                //тут делаете отчет, в size размер файла
        }
        delete FileToDel;

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


Аватара для ddv122

Старожил


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

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


ferget, ааа нашел ошибку.
если в 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;
}

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

Это сообщение посчитали полезным следующие участники:

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


Аватара для ddv122

Старожил


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

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


Код: Выделить весь код
if(!FileExists("spisok.txt"))
  {
    List1->Add(spisok->Memo1->Text);
    List1->SaveToFile("spisok.txt");
  }
Так я проверяю наличие файла
Как мне исключить пустые строчки?

Memo1->Lines->Text=Trim(Memo1->Lines->Text);
Уберает пустые строки с memo. но если файл изменен руками....

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


Последний раз редактировалось ddv122, 28-03-2012 в 13:29.


Отправлено: 13:19, 28-03-2012 | #54


Аватара для ferget

Разный


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

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


можно проверять при чтении

Код: Выделить весь код
if (!spisok->Strings[i].IsEmpty())
spisok здесь TStringList
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:39, 28-03-2012 | #55


Аватара для ddv122

Старожил


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

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


ferget, спасибо, только не получается у меня отчет сделать как сдесь
Цитата ddv122:
memo->Lines->Add(DateToStr(dt) +" " + TimeToStr(dt) +" " + " - "+"Удален ярлык : "+Path+sear.Name+", размер: " +IntToStr(sear.Size)+" байт"); »

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


Отправлено: 13:51, 28-03-2012 | #56


Аватара для ferget

Разный


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

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


что именно не получается?

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


Аватара для ddv122

Старожил


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

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


Код: Выделить весь код
             DeleteDir(ObjectName);
                  RemoveDir (ObjectName);
                  memo->Lines->Add("Удалена папка : "+ ?????????????);

                }else
                (FileExists);
                DeleteFile (ObjectName);
memo->Lines->Add("Удален файл : "+ ?????????????);
Если прописывать +ObjectName то выводит список всего, а мне нужно только удаленного

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


Отправлено: 14:16, 28-03-2012 | #58


ИО Капитана Очевидности


Contributor


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

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


Цитата ddv122:
memo->Lines->Add(DateToStr(dt) +" " + TimeToStr(dt) +" " + " - "+"Удален ярлык : "+Path+sear.Name+", размер: " +IntToStr(sear.Size)+" байт"); »
Вообще-то так писать не стоит.
Во-первых, это очень сложно отлаживать.
Во-вторых, текст в кавычках имеет тип const char* (указатель на массив символов), и попытка "дописать" к нему целочисленное значение через плюс может привести к противоположному результату.
Лучше использовать функцию Format(ИСХ_СТРОКА, ПАРАМЕТРЫ)
В исходной строке вы указываете спец-символы (%d, %s и т.д.), в которые функция автоматически подставит нужные значения из списка параметров. Список параметров передаётся через макрос ARRAYOFCONST

Пример использования
Код: Выделить весь код
const AnsiString Sourse_Message = "Есть %d единиц товара \"%s\" по цене %d руб.";
AnsiString Name = ...;
int Count = ...;
int Cost = ...;
AnsiString Result = Format (Sourse_Message, ARRAYOFCONST((Count, Name, Cost)));

-------
Самое совершенное оружие, которым забиты арсеналы богатых и процветающих наций, может легко уничтожить необразованного, больного, бедного и голодного. Но оно не может уничтожить невежество, болезнь, нищету и голод. (Фидель Кастро)

Почему всех осужденных за измену Родине при Сталине реабилитировали при Горбачёве по отсутствию состава преступления? Потому что при Горбачёве измену Родине перестали считать преступлением.

Это сообщение посчитали полезным следующие участники:

Отправлено: 07:10, 29-03-2012 | #59


Аватара для 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);
Добрый вечер.Не подскажите как к этому коду сделать список исключений,
Допустим удаляет все *.mp3 файлы но кроме 122.mp3

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


Отправлено: 21:59, 24-05-2012 | #60



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




 
Переход