Dateinamen eines Ordners in Variablen Speichern



  • bor um erlich zu sein Steig ich durch den quelltext auf dem Link den du mir gegeben hast so gar nich durch.



  • Was genau verstehst du denn nicht?
    In FindFileData.cFileName steht dann immer der aktuell ausgelesene Dateiname aus dem Ordner DirSpec. Dein Test.txt musst du dann durch diesen Dateinamen ersetzen. Da du allerdings nur xml Dateien auslesen willst (ich geh mal davon aus in deinem Ordner befinden sich auch andere Dateien), solltest du vorher schon überprüfen ob der Dateiname mit .xml endet.


  • Administrator

    Da du nach Anfänger bist, bietet es sich vielleicht an, auch eine alternative Methode zu verfolgen. Ich gebe dir mal einen Code, den du kompilieren kannst und dann damit was probieren kannst, was ich dir vorschlage. Vielleicht wird dich das auf eine Idee bringen 🙂

    #include <string>
    #include <vector>
    #include <iostream>
    
    int main(int argc, char* argv[])
    {
      std::vector<std::string> arguments(argv, argv + argc);
    
      std::vector<std::string>::iterator iter = arguments.begin();
      std::vector<std::string>::iterator end = arguments.end();
    
      for(; iter != end; ++iter)
      {
        std::cout << *iter << std::endl;
      }
    
      return 0;
    }
    

    Nachdem du dieses Programm kompiliert hast, schiebst du deine XML Files oder einfach den ganzen Inhalt des Ordners auf dein ausführbares File. Bewundere all die schönen Pfade 🙂

    C++ Referenz -> http://www.cplusplus.com/reference/

    Grüssli



  • also zuerst einmal liegen in diesem Ordner nur XML Dateien ob sich daran noch etwas ändert kann ich noch nicht sagen.

    wenn ich den Code von der Seite in mein Programmkopiere und mal testweise ausführe bringt er mir ein Falsches Ergebnis.

    Ich muss ja quai den Pfand eingeben in dem ersuchen soll das habe ich gemacht danach schreibt er mir aber nicht die erst Datei sondern einfach nur:

    "."

    Angedacht war doch aber sicher das statt diesem einzelnen Punkt ein Dateiname erscheint oder nicht ?
    Also bin ich in der Annahme dass ich an dem Code noch irgendetwas ändern muss ... nur wie gesagt ich hab kein Plan .. 🙄



  • ALso wenn ich es kompiliere und ausführe gibt er mit nacheinander alle Dateien auf die Konsole aus, die sich in dem Ordner befinden den ich für DirSpec angegeben habe.
    Wobei Dravere sein code bei mir leider nicht zum gewünschten Effekt führt.



  • oneill5000 schrieb:

    ALso wenn ich es kompiliere und ausführe gibt er mit nacheinander alle Dateien auf die Konsole aus, die sich in dem Ordner befinden den ich für DirSpec angegeben habe.
    Wobei Dravere sein code bei mir leider nicht zum gewünschten Effekt führt.

    du hast aber schon den Pfad erst nach dem auführen in die Konsole eingetippt ? Oder hast du den direkt in den Quellcode geschrieben ?



  • ausgeführt und dann den pfad in der konsole eingegeben. danach wurden alle dateien aus diesem ordner aufgelistet.



  • ja eben so dachte ich mir das auch aber bei mir zeigt er nur einen Punkt an... 😞



  • Also wenn du keine Datei namens "." hast, ist mir das eigentlich ein Rätsel wie das ein Punkt rein kommt. Der Punkt kann ja dann nur in cFileName drin stehen. Also mal untersuchen unter welchen Umständen FindFirstFile oder FindFirstFile ein Punkt in ihren Parameter FindFirstFile schreiben.



  • Bist du sicher, dass du im richtigen Verzeichnis bist?



  • bin zur Zeit recht ratlos und weis nich ich jetz nuch tun kann ...an den Lehrzeichen im Pfad kann es nicht liegen?

    hab mal n Screen hochgeladen um euch das Problem noch mal zu verdeutchlichen

    http://www.imgbox.de/users/public/thumbnails/w52538c100_t.gif

    Mein Quelltext unverändert:

    #include <iostream.h>
    #include <conio.h>
    #include <stdio.h>
    #include <fstream.h>
    #include <fstream>
    #include <windows.h>
    
    using namespace std;
    
    void main()
    {
    
     //----------------------------------------------------------------
    WIN32_FIND_DATA FindFileData;
    HANDLE hFind = INVALID_HANDLE_VALUE; 
    char DirSpec[MAX_PATH]; // directory specification
    
    cout<<"Path: ";
    cin.get(DirSpec, MAX_PATH);
    cout<<"\n";
    strncat(DirSpec, "\\*", 3);
    hFind = FindFirstFile(DirSpec, &FindFileData);
    
    	if(hFind == INVALID_HANDLE_VALUE)
    	{
    	cout<<"Error: invalid path\n";
    	}
    
    cout<<FindFileData.cFileName<<"\n";
    
    getchar();
    


  • Hat denn wirklich keiner ne Lösung???

    Gebe ich als Pfad zum Beispiel nur C: an kommt als Ausgabe:

    ".rnd"

    Dort gibt es eine Datei die auch so heißt hier funzt es also noch!!! Habe ich jedoch 2 Datein in C wird nur die .rnd in der Konsole gezeigt.

    Gehe ich in C:\Dokumente und Einstellungen
    gibt er mir wieder nur einen Punkt aus. 😕

    Ich glaube es liegt an den Leerzeichen in "Dokumente und EInstellungen" könnte das nich sein ? Wenn ja was kann ich dagegen tun ?


  • Administrator

    1. Problem: Jochen hat dich, meiner Meinung nach, in das falsche Forum verschoben. Der C++ Standard kennt keine Dateisysteme, er kann höchstens ein File öffnen, lesen, schreiben und wieder schliessen. Das was du machst, ist WinAPI Programmierung. Dazu gibt es ein eigenes Forum hier. Da bekommst du deine Fragen eher beantwortet.
    2. Problem: Ich habe dir schon mal eine einfache reine C++ Lösung gesagt. Die wurde von jemand anderem mit dem simplen Satz verworfen:

    Wobei Dravere sein code bei mir leider nicht zum gewünschten Effekt führt.

    Dieser Satz sagt aber überhaupt nichts aus. Welchen gewünschten Effekt? Ich wollte nur zeigen, wie man an die Pfade der Dateien auch noch kommen kann. Zwar nicht ganz voll automatisch, aber fast. Und es dürfte für sowas womöglich reichen.
    Aber es ist dein Problem, wenn du auf diesen Lösungsansatz erst gar nicht eingehen willst.

    Grüssli



  • Dravere schrieb:

    Da du nach Anfänger bist, bietet es sich vielleicht an, auch eine alternative Methode zu verfolgen. Ich gebe dir mal einen Code, den du kompilieren kannst und dann damit was probieren kannst, was ich dir vorschlage. Vielleicht wird dich das auf eine Idee bringen 🙂

    #include <string>
    #include <vector>
    #include <iostream>
    
    int main(int argc, char* argv[])
    {
      std::vector<std::string> arguments(argv, argv + argc);
    
      std::vector<std::string>::iterator iter = arguments.begin();
      std::vector<std::string>::iterator end = arguments.end();
    
      for(; iter != end; ++iter)
      {
        std::cout << *iter << std::endl;
      }
    
      return 0;
    }
    

    Nachdem du dieses Programm kompiliert hast, schiebst du deine XML Files oder einfach den ganzen Inhalt des Ordners auf dein ausführbares File. Bewundere all die schönen Pfade 🙂

    C++ Referenz -> http://www.cplusplus.com/reference/

    Grüssli

    Ich bin bisher nicht darauf eingegangen weil mir nicht ganz klar ist was du damit meinst.
    Ich hab den Code nun kompiliert.

    was meinst du mit:
    "schiebst du deine XML Files oder einfach den ganzen Inhalt des Ordners auf dein ausführbares File" ?

    Wenn ich die Test XML Datei in den Ordner meines Programmes schiebe geschiet mit dieser Datei nichts.
    Es kommt lediglich folgende Anzeige in der Konsole:

    "c:\Dokumente und Einstellungen\b065074\Desktop\dateiarbeit2\Project1.exe"

    Was kann ich im weiteren Verlauf damit anstellen ?



  • Du kannst das Programm mit

    programmname.exe *.xml

    aufrufen.



  • Belli schrieb:

    Du kannst das Programm mit

    programmname.exe *.xml

    aufrufen.

    ja ok damit greift mein Programm vielleicht darauf zu aber es hilft mir momentan je noch nichts.
    Ich muss in meinen Quellcode zuerst einmal angeben auf welche Datei der Quellcode angewendet werden soll. .. nur das bekomme ich ja mit der Methode nicht hin ...



  • ah ok ich glaube jetz hab ich verstanden was ihr mein ...

    also ist der Pfad des Ordners nun in *iter gespeichert richtig ?

    Aber wie komme ich dann an die Pfade aller einzelnen .xml dateien ???
    Denn zur Zeit speichert er ja nur den Pfad der exe



  • Kopiere die ausführbare ex3-Datei in Deinen Ordner, in dem sich Deine xml-Dateien befinden. Begib Dich direkt dorthin, d.h. wechsel dann in der Konsole in das entsprechende Verzeichnis.

    Nun gib erneut programmname.exe *.xml (oder testweise auch mal programmname.exe .) ein.


  • Administrator

    Oder belass das ausführbare File, wo es ist. Markiere die Files im Ordner und mach ein Drag&Drop auf das ausführbare File. Schon hast du alle Pfade zu allen Files, welche du per Drag&Drop auf das ausführbare File geschoben hast.

    Statt eines Drag&Drops kannst du das ganze natürlich auch über die Konsole machen. Dort kannst du bereits eine Beschränkung auf *.xml Files hinsetzen und müsstest dies nicht noch manuell im Programm machen.

    Mein Programm soll einfach zeigen, dass du an die Pfade auch durch den Benutzer kommen kannst. Dass der Benutzer die Pfade zu den einzelnen Files dem Programm übergeben kann.

    Grüssli



  • Dravere schrieb:

    Oder belass das ausführbare File, wo es ist. Markiere die Files im Ordner und mach ein Drag&Drop auf das ausführbare File. Schon hast du alle Pfade zu allen Files, welche du per Drag&Drop auf das ausführbare File geschoben hast.

    Statt eines Drag&Drops kannst du das ganze natürlich auch über die Konsole machen. Dort kannst du bereits eine Beschränkung auf *.xml Files hinsetzen und müsstest dies nicht noch manuell im Programm machen.

    Mein Programm soll einfach zeigen, dass du an die Pfade auch durch den Benutzer kommen kannst. Dass der Benutzer die Pfade zu den einzelnen Files dem Programm übergeben kann.

    Grüssli

    Ja ok das denke ich hab ich schon verstanden aber zurzeit werden ja die Pfade der XML dateien in der Konsole dann angezeigt aber ich habe sie ja nach wie vor nicht als Variable. Aber wie bekomme ich diese Pfade dann gespeichert um mich im späteren Quelltext darauf beziehen zu können ???

    😕 Ich glaub ich steh immernoch aufm Schlauch oder ?


Anmelden zum Antworten