Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

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

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

Аватара для ddv122

Старожил


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


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

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


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

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

 

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


Contributor


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

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


Возможно.
И даже средствами самой операционной системы - с использованием командных файлов и скриптов

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

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

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

Отправлено: 17:44, 18-02-2012 | #2



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

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


Аватара для ddv122

Старожил


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

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


в командной строке у меня давно уже вышло
но при условии что батник на самой флэшке или указан путь к флэшке,
а вот что бы автоматом при вставке флэшки удаляла с неё, такое вот не выходит...
с WM_DEVICECHANGE нужно разобраться...

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


Последний раз редактировалось ddv122, 19-02-2012 в 21:12.


Отправлено: 17:52, 18-02-2012 | #3


Аватара для ddv122

Старожил


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

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


Как я понимаю нужен обработчик событий WM_DEVICECHANGE который будет опрашивать диски с помощью функции GetLogicalDrives, функцией GetDriveType проверять тип, если DRIVE_REMOVABLE -> то съемный диск) и удалять с него файл...Но не получается, может есть варианты у вас?
Вот код
читать дальше »

int n;
DWORD dr = GetLogicalDrives(); //

for(int x = 0; x < 26; x++){
n = ((dr>>x)&1);
if(n){
AnsiString dl = AnsiString((char)(65+x))+":";
UINT DriveType = GetDriveType((dl).c_str());
if(DriveType != DRIVE_CDROM){
if(DriveType != DRIVE_FIXED) {
ComboBox1->Items->Add(dl);


Но результат в ComboBox1 и я не знаю как от туда вытащить имя флэшки и применить его в system()

Отправлено: 23:50, 19-02-2012 | #4


Аватара для ferget

Разный


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

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


вот код на delphi

Код: Выделить весь код
var
  Drive: Char; //Буква диска
const
  pref = ':';
begin
  for Drive := 'B' to 'Z' do
    if GetDriveType(PChar(Drive + pref)) = DRIVE_REMOVABLE then lbl1.Caption:=Drive+ pref;
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:05, 20-02-2012 | #5


Аватара для ddv122

Старожил


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

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


А еще не подскажите как реализовать удаление папок с файла *.txt(там их список) или с memo

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


Отправлено: 15:31, 20-02-2012 | #6


Аватара для Drongo

Будем жить, Маэстро...


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

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


Цитата ddv122:
Но результат в ComboBox1 и я не знаю как от туда вытащить имя флэшки и применить его в system() »
дальше делаете цикл
Код: Выделить весь код
...
   for(int i = 0; i < ComboBox1->Items->Count; i++){
      // Циклический проход по элементам списка
      // Выполнение всех необходимых процедур с флекой по порядку
     }
...

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif

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

Отправлено: 15:50, 20-02-2012 | #7


Аватара для ferget

Разный


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

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


примерно так
Код: Выделить весь код
TStringList* fileToDel = new TStringList();
fileToDel->LoadFromFile(путь к txt);

int Count= fileToDel ->Count;
 
for (int i = 0; i < Count; i++)
{
    AnsiString FileName= fileToDel[i];
    DeleteFile(FileName);
}
delete fileToDel;
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:02, 20-02-2012 | #8


Аватара для ddv122

Старожил


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

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


Вот что я хотел
Код: Выделить весь код
{
char s[100];
strcpy(s, Edit1->Text.c_str());
AnsiString DirPath = s, foldername;
TStringList* ToDel = new TStringList();
ToDel->LoadFromFile("Spisok.txt");
int Count= ToDel ->Count;
for (int i = 0; i < Count; i++)
if (ToDel)
{
AnsiString DirName= ToDel->Strings[i];
RemoveDir(s+DirName);
AnsiString FileName= ToDel->Strings[i];
DeleteFile(s+FileName);
}
}
Можете ещё помочь нужно реализовать
Удалять *.exe файл, если есть одноименная скрытая папка

Последний раз редактировалось ddv122, 20-02-2012 в 23:23.


Отправлено: 16:55, 20-02-2012 | #9


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


Contributor


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

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


Цитата ddv122:
char s[100];
strcpy(s, Edit1->Text.c_str());
AnsiString DirPath = s, foldername; »
Если рассудок и жизнь дороги вам, никогда не используйте в своей программе char
Если внезапно на флешке окажется файл с именем длиннее ста символов, ваша программа будет выдавать очень интересные и совершенно непредсказуемые ошибки.

Особенно непонятно, зачем вы используете массив char, периодически чередуя его с объектами AnsiString?

Цитата ddv122:
for (int i = 0; i < Count; i++)
if (ToDel)
{
...
}
»
Зачем вы на каждом участке цикла проверяете "истинность" указателя ToDel? Боитесь, что кто-то обнулит его?

Код: Выделить весь код
{
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 (...) //проверка, есть ли каталог ObjectName - увы, имя функции не помню
      RemoveDir (ObjectName);
   elseif (...) // проверка, есть ли файл ObjectName - увы, имя функции не помню
      DeleteFile (ObjectName);
   
}
delete ToDel; // Не забываем про удаление объектов, созданных командой new

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

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

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

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



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




 
Переход