Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

Automatische Ordnererstellung mit C

gelöscht_146282 / 6 Antworten / Baumansicht Nickles

Hallo


Da ich viel auf Zeiteinsparung lege würde ich gerne Wissen wie ich mit einen kleinen C Prog, Ordner mit Zahlen als Namen erstellen kann?


for(i=start; i<=start+anzahl; i++)
 {
  system("md i");
 }


Die Abfragen davor habe ich weggelassen, ebenso die include Anweisung(en).


Start stellt den Wert dar von wo er Anfangen soll zu Zählen z.B. 100 und Anzahl ist die Inkrementierungsweite z.B. 60. Es sollten am ende also 60 Ordner mit den Namen 100 bis 160 erscheinen. Bei mir gibt er aber nur i als Ordner aus und dann sagt er mir das weitere Ordner bereits vorhanden sind.


Wie aknn ich das Prob lösen?


Danke

bei Antwort benachrichtigen
thomas woelfer gelöscht_146282 „Automatische Ordnererstellung mit C“
Optionen

hi.

zunaechst einmal macht es nicht sonderlich viel sinn einen system call zu verwenden. mkdir() taete es auch, und zwar deutlich effizienter.

zum anderen ist dein problem das du den string "md i" ausfuehren laesst. das ist eine konstante - und darum wird eben nur ein ordner mit dem namen i angelegt.

was dur brauchst ist sowas in der art:

char name[ _MAX_PATH];
for( int i=start // ... etc.
{
sprintf(name, "%d", i);
mkdir( name);
}

WM_HOPETHISHELPS

this posting contains no tpyos.
bei Antwort benachrichtigen
gelöscht_146282 thomas woelfer „hi. zunaechst einmal macht es nicht sonderlich viel sinn einen system call zu...“
Optionen

Ich habe das Prog umgeschrieben, und wolte es testenm da kam die Meldung: mkdir undefiniert.
Und da ist mir eingefallen die richtige Include Datei einzubinden.
Das müsste dann ja "dir.h" sein. Nach der nächsten compilierung kam aber der Fehler das die dir.h nicht geöffnet werden kann. Habe ich es flasch geschriebn, die falsche genommen oder kann es damit zusammenliegen das ich Win 98 SE benutze?

bei Antwort benachrichtigen
thomas woelfer gelöscht_146282 „Ich habe das Prog umgeschrieben, und wolte es testenm da kam die Meldung: mkdir...“
Optionen

heist _mkdir und befindet sich in direct.h

WM_FYI

this posting contains no tpyos.
bei Antwort benachrichtigen
martinx24 gelöscht_146282 „Automatische Ordnererstellung mit C“
Optionen

Hallo Ghost!
Hier mal meine Lösung: (funktioniert über eine Stapelverarbeitungsdatei)

//Nickles - Verzeichnisse mit Zahlennamen anlegen - Stand vom 22.10.2003

#include &ltstdio.h>
#include &ltstdlib.h>
#include &ltstring.h>
#include &lttime.h>

char dosstring1[256]=("mkdir C:\\"); //String mit dem Anfang des Dos-Befehls (hier ist auch der Pfad enthalten
//wo alle Verzeichnisse angelegt werden sollen
char dosstring2[256]=(" "); //String, der den umgewandelten Zahlenwert aufnimmt (=Ende des Dos-Befehls)
char kopie[256]=(" "); //String, der eine Arbeitskopie von eingabe erhält
char pfadbat[]=("C:\\Temp.bat"); //Pfad und Name der temporären *.bat - Datei
char systemstring[]=("start "); //für das Starten der *.bat-Datei über system() erforderlich


void sleep(int zeit); //Wartefunktion


int main(void)
{

FILE *bat; //Stream für *.bat-Datei

if ((bat=fopen(pfadbat,"w"))==NULL) //Anlegen der *.bat-Datei zum Schreiben
{
fprintf(stderr,"Fehler beim Anlegen der Bat-Datei!");
fprintf(stderr,"\n******************************* AUF WIEDERSEHEN! *******************************\n\n");
sleep(3);
exit(-1);
}

for (int i=1; i {
strcpy(kopie,dosstring1); //eingabe in kopie kopieren
sprintf(dosstring2, "%d", i); //Zahl in string umwandeln und in dosstring2 ablegen
strcat(kopie,dosstring2); //dosstring2 an kopie anhängen
fprintf(bat,"%s\n",kopie); //mkdir c:\\X in die *.bat-Datei schreiben (X ist der Verzeichnisname)
printf("%s\n",kopie); //zusätzliche Ausgabe am Bildschirm
//sleep(1); //evtl. Pause?
}
fprintf(bat,"del %s",pfadbat);

if(fclose(bat)==-1) //*.bat-Datei schließen
{
fprintf(stderr,"\nFehler beim Schliessen der Bat-Datei!");
fprintf(stderr,"\n******************************* AUF WIEDERSEHEN! *******************************\n\n");
sleep(3);
exit(-1);
}

strcat(systemstring,pfadbat);
system(systemstring);

return 0;
}



void sleep(int zeit) //Wartefunktion
{
clock_t goal;
printf("\n");

goal=(zeit*CLOCKS_PER_SEC)+clock();

while(goal>clock())
;
}

Hoffe der Code wird einigermaßen fehlerfrei gepostet (hab immer wieder Probleme zwecks HTML-Format) - falls nicht, kannst Du mir noch Deine E-Mail-Adresse nennen, dann kann ich ihn Dir nochmal unverfälscht zukommen lassen...

Gruß Martin!

bei Antwort benachrichtigen
mr.escape martinx24 „Hallo Ghost! Hier mal meine Lösung: funktioniert über eine...“
Optionen
Hoffe der Code wird einigermaßen fehlerfrei gepostet (hab immer wieder Probleme zwecks HTML-Format)
Spitze klammer auf bzw. "kleiner als" zeichen ("<") wird als &lt; kodiert, d.h. mit semikolon.

mr.escape
"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
Borlander gelöscht_146282 „Automatische Ordnererstellung mit C“
Optionen

Unter W2K/WinXP lässt sich das auch mit dem FOR-Befehl lösen:
FOR /L %i IN (100,1,160) DO md %i

Ob das unter Win9x/ME auch funktioniert müsste ich allerdings erste testen...


CU Borlander

bei Antwort benachrichtigen