PDA

View Full Version : [C++]Errore compilazione


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&)'

ndakota
28-02-2009, 13:23
la funzioni si aspetta una stringa in stile C(char*) e tu le passi un carattere(char).. ciao

Mattyfog
28-02-2009, 20:03
quindi cosa devo fare per risolvere?

ndakota
28-02-2009, 20:13
quindi cosa devo fare per risolvere?

percorso_cartella lo devi dichiarare sicuramente stringa.. o string o char*.. anche perchè non puoi memorizzare chessò "documents and settings" in un char :D

DanieleC88
01-03-2009, 01:31
Dichiaralo string e poi alla funzione passa oggetto.c_str().

Comunque, dal momento che usi C++, ammazza tutti quei strcpy(), strcat() e strcmp(), usa le stringhe del C++.