Problem z odczytem dużych plików

niekowalski

Użytkownik
Dołączył
Grudzień 7, 2006
Posty
54
Witam
napisałem sobie taki prymitywny programik który wyszukuje pliku o danym rozmiarze i go usuwa , potrzebne mi to bylo bo często się spotykam z wirusem "brontok" który robi swoją kopię we wszystkich folderach i podfolderach na całym dysku o nazwie takiej samej jak folder w którym się tworzy , tak że po nazwie nie da się go wyśledzić wiec wpadlem na pomysł żeby to zrobic po rozmiarze pliku , no i niby działa ale tylko na dyskach gdzie tych plików *.exe nie ma zbyt dużo ale gdy skanuje dysk gdzie tych plików jest bardzo dużo to program się wysypuje i nie wiem jak to zrobić żeby zwiększyć jakoś bufor stringa czy jak ??
wiem że char to robimy new char i zwiększa się bufor ale nie wiem jak to zrobić ze stringiem i czy to wogule o to chodzi .
Wklejam cały kod programu do sprawdzenia , tylko prosze się nie śmiac że tak namieszane :

Kod:
int main(){
    DeleteFile("usuniete_pliki.txt");
    DeleteFile("dir_skaner.txt");
    char a;
    cout<<" Podaj Literke dysku do skanowania"<<endl;
   cin >> a;
   switch (a)
   {
    case 'c':
    system("dir /a /b /s C:\\*.exe>>dir_skaner.txt");
    break;
    case 'd':
    system("dir /a /b /s D:\\*.exe>>dir_skaner.txt");
    break;
    case 'e':
    system("dir /a /b /s E:\\*.exe>>dir_skaner.txt");
    break;
    case 'g':
    system("dir /a /b /s G:\\*.exe>>dir_skaner.txt");
    break;
    case 'h':
    system("dir /a /b /s H:\\*.exe>>dir_skaner.txt");
    break;
    case 'i':
    system("dir /a /b /s I:\\*.exe>>dir_skaner.txt");
    break;
    case 'j':
    system("dir /a /b /s J:\\*.exe>>dir_skaner.txt");
    break;
    case 'k':
    system("dir /a /b /s K:\\*.exe>>dir_skaner.txt");
    break;
    case 'l':
    system("dir /a /b /s L:\\*.exe>>dir_skaner.txt");
    break;
    case 'm':
    system("dir /a /b /s M:\\*.exe>>dir_skaner.txt");
    break;
    case 'n':
    system("dir /a /b /s N:\\*.exe>>dir_skaner.txt");
    break;
}
  Sleep(10); 
  
    ifstream in("dir_skaner.txt");
    char linia=1;
    string wers[MAX_PATH];
    int wielkosc;
    printf("%s"," Podaj Rozmiar Plikow do usuniecia\n");
    scanf("%d",&wielkosc);
    while(getline(in, wers[linia])){
                      {
   DWORD dwRozmiar;
string Plik=wers[linia];

HANDLE hPlik;
hPlik =    CreateFile(Plik.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
dwRozmiar = GetFileSize(hPlik, NULL);
CloseHandle(hPlik);
if(dwRozmiar == wielkosc)
{
SetFileAttributes(Plik.c_str(),FILE_FLAG_DELETE_ON_CLOSE);
DeleteFile(Plik.c_str());
FILE *usuniete;
usuniete = fopen("usuniete_pliki.txt","a+");
fputs(Plik.c_str(),usuniete);
fputs("\n",usuniete);
fclose(usuniete);
}
}
Sleep(50);
            linia++;
                      }
                      in.close();
                      DeleteFile("dir_skaner.txt");
                      
            ShellExecute(0,"open","usuniete_pliki.txt",0,0,SW_NORMAL);
                    
    
    
    return 0;
}
 
Ostatnio edytowane przez moderatora:

thc_flow

Zbanowany
Dołączył
Listopad 13, 2008
Posty
649
Może na początek użyj więcej C++ w C++? a nie batcha...

Poza tym wrzucanie wyniku działania zewnętrznego programu do pliku zamiast obsługi go i jego stdout jest eeee...głupie?
 
Ostatnia edycja:
Do góry Bottom