Mattyfog
28-02-2009, 13:16
Ciao,
è da un bel po' che sono a digiuno di programmazione ma ho bisogno di crearmi un programma: ho sovuto ripristinare con recuva i dati da un hard disk e adesso ho una cartella contenente migliaia di file copiati al suo interno con parecchie (diciamo dalle 10 alle 20) copie di ognuno chiamate in questo:
a
a[1]
a[2]
Io ho bisogno di creare un programma che elimini le copie in questo modo:
1 cerchi quella che occupa di + e la tenga
2 se occupano tutte uguali tenga la prima e cancelli le altre
Tempo fa avevo fatto un programma che trovava i file presenti in una directory e nelle sue sottodirectory e ho provato a scrivere questo:
#include <iostream>
/*#include "copymdir.h"
#include "copymyfile.h"*/
#include <windows.h>
#include <stdio.h>
#include <vector>
#include <string>
#include <direct.h>
#include <fstream>
using namespace std;
vector<string> listaofile;
int main()
{
char percorso_cartella;
cout << "Programma avviato" << endl;
cout << "Premere inserire la cartella nella quale eliminare i \nfile doppi:";
cin >> percorso_cartella;
//ottengo l'elenco dei file nella cartella;
search(percorso_cartella);
return 0;
}
void search(char *p)
{
WIN32_FIND_DATA fd;
char tlist[MAX_PATH];
char pf[MAX_PATH];
strcpy(pf, p);
strcat(pf, "\\*.*");
HANDLE h = FindFirstFile(pf, &fd);
if (h != INVALID_HANDLE_VALUE)
{
do
{
if( strcmp(fd.cFileName, ".") && strcmp(fd.cFileName, ".."))
{
if(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
//printf ("[%s]\n", fd.cFileName);
//per continuare la ricerca:
char pf[MAX_PATH];
strcpy(pf, p);
strcat(pf, "\\");
strcat(pf, fd.cFileName);
search(pf);
}
else
{
//printf ("\t%s\n", fd.cFileName);
//lista origine file
strcpy(tlist, p);
strcat(tlist, "\\");
strcat(tlist, fd.cFileName);
listaofile.push_back(tlist);
}
}
} while (FindNextFile(h, &fd));
FindClose(h);
}
else
printf("Errore %d\n", GetLastError ());
}
uso code::blocks e nella compilazione ho questo errore
error: no matching function for call to `search(char&)'
è da un bel po' che sono a digiuno di programmazione ma ho bisogno di crearmi un programma: ho sovuto ripristinare con recuva i dati da un hard disk e adesso ho una cartella contenente migliaia di file copiati al suo interno con parecchie (diciamo dalle 10 alle 20) copie di ognuno chiamate in questo:
a
a[1]
a[2]
Io ho bisogno di creare un programma che elimini le copie in questo modo:
1 cerchi quella che occupa di + e la tenga
2 se occupano tutte uguali tenga la prima e cancelli le altre
Tempo fa avevo fatto un programma che trovava i file presenti in una directory e nelle sue sottodirectory e ho provato a scrivere questo:
#include <iostream>
/*#include "copymdir.h"
#include "copymyfile.h"*/
#include <windows.h>
#include <stdio.h>
#include <vector>
#include <string>
#include <direct.h>
#include <fstream>
using namespace std;
vector<string> listaofile;
int main()
{
char percorso_cartella;
cout << "Programma avviato" << endl;
cout << "Premere inserire la cartella nella quale eliminare i \nfile doppi:";
cin >> percorso_cartella;
//ottengo l'elenco dei file nella cartella;
search(percorso_cartella);
return 0;
}
void search(char *p)
{
WIN32_FIND_DATA fd;
char tlist[MAX_PATH];
char pf[MAX_PATH];
strcpy(pf, p);
strcat(pf, "\\*.*");
HANDLE h = FindFirstFile(pf, &fd);
if (h != INVALID_HANDLE_VALUE)
{
do
{
if( strcmp(fd.cFileName, ".") && strcmp(fd.cFileName, ".."))
{
if(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
//printf ("[%s]\n", fd.cFileName);
//per continuare la ricerca:
char pf[MAX_PATH];
strcpy(pf, p);
strcat(pf, "\\");
strcat(pf, fd.cFileName);
search(pf);
}
else
{
//printf ("\t%s\n", fd.cFileName);
//lista origine file
strcpy(tlist, p);
strcat(tlist, "\\");
strcat(tlist, fd.cFileName);
listaofile.push_back(tlist);
}
}
} while (FindNextFile(h, &fd));
FindClose(h);
}
else
printf("Errore %d\n", GetLastError ());
}
uso code::blocks e nella compilazione ho questo errore
error: no matching function for call to `search(char&)'