myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   [C] Dateien aus Unterordner Ausschneiden (https://mygully.com/showthread.php?t=3174606)

Odatas 21.01.14 14:32

[C] Dateien aus Unterordner Ausschneiden
 
Also ich habe ein Ordner da sind 1000 Ordner drinne. Ich möchte aus den 1000 Ordner alle Datein in den Obergeordneten Ordner kopieren. Und danach die Unterordner löschen.

Ich hatte schon folgendes gefunden:

Zitat:

CopyFile("C:\\lol.bat", "C:\\Ordner\\lol.bat", 0);
Scheint aber nur unter Windows zu laufen. Was in erster Linie ok ist aber ich programmiere gerne Betriebssystemunabhängig. Gibt es da also etwas?

Desweiteren weiß ich grad nicht mehr wie man die Dateinamen aus einem Ordner auslesen kann. Da gabs doch irgendwie einen Trick oder? und vor allem wie ist das mit Unterordnern in dem Unterordner? Rekursiv währe da wohl eine Möglichkeit. Die tiefsten Eben sind auch nur 5 Ordner tief...

Ein paar Ideen oder Anregungen?

HappyMike34 21.01.14 14:59

warum willst du das in C programmieren? Da gibt es doch viel einfachere Möglichkeiten.

Du kannst z.B. alle Dateien suchen und die gefundenen einfach in jeden beliebigen Ordner kopieren/verschieben. In Windows geht das im Explorer, in Linux mit dem Befehl "find"

Code:

find . -type f -exec mv {} <destdir> \;

Odatas 21.01.14 15:21

Weil ich es sehr oft machen muss und ein Doppelklick einfacher als ein Befehl schreiben ist....

spartan-b292 21.01.14 15:24

Mal als Vorschlag, nicht wirklich getestet.

Code:

#include <stdio.h>
#define BUFSIZE 1024

int main (int argc, char **argv)
{
    size_t len = 0 ;
    const char src[] = "foo.txt" ;
    const char dest[] = "bar.txt" ;
    char buffer[BUFSIZE] = { '\0' } ;

    FILE* in = fopen( src, "rb" ) ;
    FILE* out = fopen( dest, "wb" ) ;

    if( in == NULL || out == NULL )
    {
        perror( "An error occured while opening files!!!" ) ;
        in = out = 0 ;
        return 1;
    }
                while( (len = fread( buffer, BUFSIZE, 1, in)) > 0 )
                {
                        fwrite( buffer, BUFSIZE, 1, out ) ;
                }

                fclose(in) ;
                fclose(out) ;

                if(  remove(src) )
                {
                        puts( "File successfully moved!\n" ) ;
                }
                else
                {
        perror( "An error occured while moving the file!" ) ;
                }
        }
}


Odatas 22.01.14 15:20

Das ist nicht ganz das was ich wollte aber danke für die Anregung. Im Grunde muss ich jetzt nur noch die Dateinamen aus den Ordner auslesen und dann copieren. Da ich aber auch Videos und Musikdateien Kopieren muss wird mir fopen glaub ich nicht weiter helfen.

spartan-b292 22.01.14 17:40

Ich habe das gerade erfolgreich mit mp3, avi und txt Dateien getestet.

Odatas 24.01.14 12:44

Genau mit dem Code? Ich weiß leider nicht wie ich die Dateinamen auslesen kann. Das ist mein eigenntliches Problem. Alle Dateinamen nacheinander auslesen.


Aber ist ja schonmal gut zu wissen dass das mit Fopen auch funktioniert.

aggi987 24.01.14 16:40

Nicht so einfach das Betriebssystemunabhängig zu machen. Unter Linux/Unix gibt es dafür die Funktionen
opendir/readdir/closedir. Unter Windows geht das anders:
[Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]
[Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]

Sonst gibt es noch Portierungen vom gcc-Compiler nach Windows ( Cygwin [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]
die dann auch die Unix-Funktionen haben.

spartan-b292 24.01.14 17:49

Ja mit dem Code. Um Dateinamen in einem Verzeichnis einzulesen kannst du [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...] nehmen. Gibt es Für windows oder Linux.

Alternativ kannst du natürlich auch deinen Code jeweils für Windows und Linux schreiben und dann mit preprocessor Macros arbeiten. Bsp:
#ifdef WIN32
//mach was
#endif

EDIT: Mit C ist das alles schon ein bischen aufwändiger. Mit einer S*****sprache wie Perl dürfte das weniger Arbeit sein, wenn vermtl auch langsamer.

Odatas 26.01.14 21:40

Zitat:

Zitat von spartan-b292 (Beitrag 25247595)
Mit C ist das alles schon ein bischen aufwändiger. Mit einer S*****sprache wie Perl dürfte das weniger Arbeit sein, wenn vermtl auch langsamer.


Relevant XKCD: [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:37 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.