Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
 |
21.01.14, 14:32
|
#1
|
Erfahrenes Mitglied
Registriert seit: Nov 2011
Beiträge: 648
Bedankt: 326
|
[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?
|
|
|
21.01.14, 14:59
|
#2
|
Erfahrenes Mitglied
Registriert seit: Mar 2010
Beiträge: 676
Bedankt: 655
|
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> \;
__________________
my brain has two parts, the right and the left...on the left, there is nothing right...on the right, there is nothing left
|
|
|
21.01.14, 15:21
|
#3
|
Erfahrenes Mitglied
Registriert seit: Nov 2011
Beiträge: 648
Bedankt: 326
|
Weil ich es sehr oft machen muss und ein Doppelklick einfacher als ein Befehl schreiben ist....
|
|
|
21.01.14, 15:24
|
#4
|
Echter Freak
Registriert seit: Mar 2010
Ort: /home/spartan-b292
Beiträge: 2.856
Bedankt: 1.701
|
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!" ) ;
}
}
}
__________________
"They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety"
|
|
|
22.01.14, 15:20
|
#5
|
Erfahrenes Mitglied
Registriert seit: Nov 2011
Beiträge: 648
Bedankt: 326
|
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.
|
|
|
22.01.14, 17:40
|
#6
|
Echter Freak
Registriert seit: Mar 2010
Ort: /home/spartan-b292
Beiträge: 2.856
Bedankt: 1.701
|
Ich habe das gerade erfolgreich mit mp3, avi und txt Dateien getestet.
__________________
"They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety"
|
|
|
24.01.14, 12:44
|
#7
|
Erfahrenes Mitglied
Registriert seit: Nov 2011
Beiträge: 648
Bedankt: 326
|
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.
|
|
|
24.01.14, 16:40
|
#8
|
Anfänger
Registriert seit: Jan 2010
Beiträge: 18
Bedankt: 14
|
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 Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
Sonst gibt es noch Portierungen vom gcc-Compiler nach Windows ( Cygwin [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
die dann auch die Unix-Funktionen haben.
|
|
|
24.01.14, 17:49
|
#9
|
Echter Freak
Registriert seit: Mar 2010
Ort: /home/spartan-b292
Beiträge: 2.856
Bedankt: 1.701
|
Ja mit dem Code. Um Dateinamen in einem Verzeichnis einzulesen kannst du [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu 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.
__________________
"They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety"
|
|
|
26.01.14, 21:40
|
#10
|
Erfahrenes Mitglied
Registriert seit: Nov 2011
Beiträge: 648
Bedankt: 326
|
Zitat:
Zitat von spartan-b292
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 Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
|
|
|
Forumregeln
|
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:30 Uhr.
().
|