Dateien erkennen, kopieren und verschieben in C++

Pitri

Grünschnabel
Hallo Leute!

Ich bin ein newbie in C++ und habe dieses Tutorial gelesen, denn ich würde gerne ein programm schreiben, das beim Ausführen alle in dem Ordner vorhandenen Dateien einer bestimmten Sorte findet, sie zuerst in ein verzeichnis kopiert (Backup) und dann die Quelldatei nochmal verschiebt!

Ist das mit bescheidenen scriptkenntnissen möglich, oder benötigt das um einiges mehr? Und wenn ja wäre ich für Codeschnipsel dankbar!
 
Willkommen im Forum :-)

Welches Betriebssystem verwendest du denn?

Und was ist "eine Sorte"? Immer die gleiche Endung im Dateinamen oder unterscheidest du irgendwie anders?
 
Ich verwende Win7!

Die unterscheidung liegt nur an der Endung! In der auswahl sind alle dateien die mit .c4d .c4s .c4f .c4g .c4u oder .c4p enden! Wem die Dateiendungen unbekannt vorkommen: Kein Wunder, denn sie sind in einem Spiel benutzt!

Das Programm werde ich dann im Download-ordner benutzen, es soll alle frisch runtergeladenen dateien fürs spiel aus dem downloadordner rauskopieren und ins spiel schieben, somit muss ich das nicht immer machen :P

(Wen's interessiert: Das spiel heißt Clonk! :P)
 
Ich hab zwar XP, aber unter 7 müsste s gleich funktionieren.
Willst du das unbedingt in C machen? Eine Batchdatei würde auch reichen
(Deine Endungsanzahl ist ja überschaubar)

Also: Eine Textdatei mit Endung .bat machen

Zum kopieren:
xcopy "downloadodner\*.c4d" "zielordner\"
xcopy "downloadodner\*.c4s" "zielordner\"
...

Zum Leeren des Downloadordners:
del "ordner\*.c4d"
...

Mehr ist das nicht
 
Erstmal danke für deinen tipp! Es klappt prima!

Aber da ich zur Zeit C++ lerne, wäre es ja nicht schlecht, wenn ich tipps bekommen würde, wies damit auch geht! :P
 
Dateinamen in einem Ordner herausfinden: FindFirstFile, FindNextFile

Umbenennen/Verschieben: rename (ggf. Gleicher Name, aber anderer Pfad zum verschieben)
Löschen: remove

Kopieren: Hmmm...irgendwie gibts da keine fertige Funktion (oder?)
Also hier (ungetestet, bei Kompilerfehlern meld dich halt nocheinmal):

C++:
#include<stdio.h>
#include<io.h>
.........
int mycopy(char *quelle,char *ziel,char ueberschreib)
{
    FILE *ein;FILE *aus;__int64 len,i=0;
    aus=fopen(ziel,"rb");
    if(aus!=NULL)
    {
        fclose(aus);
        if(!ueberschreib)return 1;
    }
    ein=fopen(quelle,"rb");
    if(ein==NULL)return 2;
    aus=fopen(ziel,"wb");
    if(aus==NULL)return 3;
    len=_filelengthi64(fileno(ein));
    if(len<0)return 4;
    for(i=0;i<len;i++)fputc(fgetc(ein),aus);
    fclose(ein);fclose(aus);
    return 0;
}
Parameter:
1: Quelldatei,
2: Zieldatei,
3: Wenn 1 wird ggf. vorhandene Zieldatei überschrieben, sonst 0
Gibt 0 zurück, wenn keine Fehler waren, sonst nicht 0
 
Zuletzt bearbeitet:
Wenn ich mich richtig erinnere, sind die ersten beiden Ergebnisse . und .., also zu ignorieren
Also:

Code:
HANDLE findhandle;
WIN32_FIND_DATA finddata;
...
findhandle=FindFirstFile("pfad\\*.txt",&finddata);
if(!FindNextFile(findhandle,&finddata)){/*Fehler*/}
while(FindNextFile(findhandle,&finddata))
{
    //Dateiname ist in finddata.cFileName
    /*ins Backup kopieren;
    in den spieleordner kopieren;
    löschen;*/
}
 

Neue Beiträge

Zurück