Dateiname aus argv[] lesen

Schnelle objektorientierte, kompilierende Programmiersprache.
Ostrich
Beiträge: 23
Registriert: Fr Okt 03, 2014 2:57 pm

Dateiname aus argv[] lesen

Beitrag von Ostrich » Mi Okt 29, 2014 1:41 pm

Hallo Ich möchte den Dateinamen aus argv[] extrahieren.

geht das nur mit !strcmp oder wie?

genauer gesagt aus argv[1]

Danke

ouroboros
Beiträge: 5
Registriert: Mi Okt 29, 2014 11:25 am

Re: Dateiname aus argv[] lesen

Beitrag von ouroboros » Mi Okt 29, 2014 2:15 pm

Hi,
der Programmaufruf steht in argv[0], dahinter folgen die optionalen Parameter.
Das läßt sich als String übergeben:
printf("%s",argv[0]);

Benutzeravatar
oenone
Beiträge: 223
Registriert: Do Sep 01, 2011 2:42 pm
Wohnort: Bremen
Kontaktdaten:

Re: Dateiname aus argv[] lesen

Beitrag von oenone » Mi Okt 29, 2014 2:18 pm

Dein Betriebssystem dürfte dir Funktionen dafür anbieten. Unter Linux bekommst du aus der libgen.h die Funktion "basename".

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Dateiname aus argv[] lesen

Beitrag von cloidnerux » Mi Okt 29, 2014 2:35 pm

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

Code: Alles auswählen

myProg /home/user/file -t 123 -v
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

Code: Alles auswählen

myProg, /home/user/file, -t, 123, -v
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.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Dateiname aus argv[] lesen

Beitrag von Xin » Mi Okt 29, 2014 3:50 pm

Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Ostrich
Beiträge: 23
Registriert: Fr Okt 03, 2014 2:57 pm

Re: Dateiname aus argv[] lesen

Beitrag von Ostrich » Mi Okt 29, 2014 3:54 pm

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

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Dateiname aus argv[] lesen

Beitrag von Xin » Mi Okt 29, 2014 3:59 pm

Wie willst Du die Datei auch sonst finden?

Wenn Du nur den Dateinamen haben willst, musst Du ihn halt aus dem Pfad extrahieren.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Dateiname aus argv[] lesen

Beitrag von nufan » Mi Okt 29, 2014 4:09 pm

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

Benutzeravatar
oenone
Beiträge: 223
Registriert: Do Sep 01, 2011 2:42 pm
Wohnort: Bremen
Kontaktdaten:

Re: Dateiname aus argv[] lesen

Beitrag von oenone » Mi Okt 29, 2014 6:39 pm

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;
        }
    }

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Dateiname aus argv[] lesen

Beitrag von Xin » Mi Okt 29, 2014 6:44 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten