Seite 1 von 2
Dateiname aus argv[] lesen
Verfasst: Mi Okt 29, 2014 1:41 pm
von Ostrich
Hallo Ich möchte den Dateinamen aus argv[] extrahieren.
geht das nur mit !strcmp oder wie?
genauer gesagt aus argv[1]
Danke
Re: Dateiname aus argv[] lesen
Verfasst: Mi Okt 29, 2014 2:15 pm
von ouroboros
Hi,
der Programmaufruf steht in argv[0], dahinter folgen die optionalen Parameter.
Das läßt sich als String übergeben:
printf("%s",argv[0]);
Re: Dateiname aus argv[] lesen
Verfasst: Mi Okt 29, 2014 2:18 pm
von oenone
Dein Betriebssystem dürfte dir Funktionen dafür anbieten. Unter Linux bekommst du aus der libgen.h die Funktion "basename".
Re: Dateiname aus argv[] lesen
Verfasst: Mi Okt 29, 2014 2:35 pm
von cloidnerux
Hallo Ich möchte den Dateinamen aus argv[] extrahieren.
geht das nur mit !strcmp oder wie?
argv ist ein Array von Arrays, das die einzelnen Teile des Funktionsaufrufes beinhaltet. Dein Betriebssystem zerteilt den Aufruf
mit jedem Leerzeichen in einen neuen String und übergibt dir die Liste der einzelnen Strings sowie die Anzahl der Teilsttrings(argc).
Daher ein Aufruf wie oben gezeigt wird in die Strings
zerlegt.
Was du jetzt machen musst, ist die Liste der Strings durchzugehen und dir deine Parameter zu extrahieren.
Das kannst du mit strcmp(String compare) machen, wenn du z.B einen Parameter mit einem Text vergleichen willst.
In deinem fall kannst du es etwas einfacher machen.
Wenn es keine weiteren Parameter gibt, kannst du argv[1] direkt in fopen nutzten.
Sinnvollerweise sollte man das aber nicht machen, ohne vorher zu überprüfen ob es sich tatsächlich um einen validen Pfad handelt.
Re: Dateiname aus argv[] lesen
Verfasst: Mi Okt 29, 2014 3:50 pm
von Xin
Re: Dateiname aus argv[] lesen
Verfasst: Mi Okt 29, 2014 3:54 pm
von Ostrich
Also ich habe in argv[1] den kompletten Pfad mit Parametrierter Datei
Printf (" Argument 1 ist: %s",argv[1] ) ergibt in der Ausgabe
Argument 1 ist: c:\Programmieren\test\einlesen.txt
Hier möchte ich halt nur den Namen der eingelesenen Datei "einlesen.txt" extrahieren
Das was ihr meint ist, wenn ich das Programm mit parametern aufrufe. Anders sieht es aber aus, wenn ich die zu bearbeitende Datei (einlesen.txt) auf meine exe ziehe. dann ist der komplette Pfad drinne
Re: Dateiname aus argv[] lesen
Verfasst: Mi Okt 29, 2014 3:59 pm
von Xin
Wie willst Du die Datei auch sonst finden?
Wenn Du nur den Dateinamen haben willst, musst Du ihn halt aus dem Pfad extrahieren.
Re: Dateiname aus argv[] lesen
Verfasst: Mi Okt 29, 2014 4:09 pm
von nufan
Wofür brauchst du denn nur den Namen der Datei, ohne den kompletten Pfad? So kannst du sie nämlich nicht öffnen.
Code: Alles auswählen
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main( int argc, char *argv[] )
{
char delimiter[] = "\\";
char *token;
char *last;
printf ("Zerlege Pfad: %s\n", argv[1] );
token = strtok( argv[1], delimiter );
while( token )
{
last = token;
token = strtok( NULL, delimiter );
}
printf( "Ausgabe letzter Teil-String: %s\n", last );
return EXIT_SUCCESS;
}
$ ./path c:\\Programmieren\\test\\einlesen.txt
Zerlege Pfad: c:\Programmieren\test\einlesen.txt
Ausgabe letzter Teil-String: einlesen.txt
Siehe auch:
http://www.proggen.org/doku.php?id=c:lib:string:strtok
Re: Dateiname aus argv[] lesen
Verfasst: Mi Okt 29, 2014 6:39 pm
von oenone
Unter Windows kannst du es auch mit
_splitpath machen.
Oder plattformunabhängig (win oder linux) mit Standard-C:
Code: Alles auswählen
char *pfile;
pfile = argv[1] + strlen(argv[1]);
for (; pfile > argv[1]; pfile--)
{
if ((*pfile == '\\') || (*pfile == '/'))
{
pfile++;
break;
}
}
Re: Dateiname aus argv[] lesen
Verfasst: Mi Okt 29, 2014 6:44 pm
von Xin
Das funktioniert in 99% der Fälle, sofern unter Linux eine Datei nicht den Backslash enthält. Da dürfte Linux nämlich recht schmerzfrei sein.