FileStream und StreamReader



  • Hallo,

    Ich versuche eine Datei zu öffnen, die im selben Verzeichnis liegt wie mein Programm. Da FileStream ja keine relativen Pfadangaben unterstützt, wollte ich mir den Pfad wie folgt ausgeben lassen:

    System::String^ Path = Directory::GetCurrentDirectory() + "/";
    FileStream^ datei = gcnew FileStream( Path, FileMode::Open );
    StreamReader^ reader = gcnew StreamReader( "server.properties" );
    

    Das Problem ist jetzt, dass ich während des Ausführens folgende Fehlermeldung erhalte:

    Eine nicht behandelte Ausnahme des Typs "System.IO.DirectoryNotFoundException" ist in mscorlib.dll aufgetreten.
    
    Zusätzliche Informationen: Ein Teil des Pfades "c:\Dokumente und Einstellungen\xxx\Eigene Dateien\Visual Studio 2008\Projects\test\test\" konnte nicht gefunden werden.
    

    Wenn ich Filestream die Datei mit in die Pfadangabe gebe, also folgendes mache:

    System::String^ Path = Directory::GetCurrentDirectory() + "/server.properties";
    FileStream^ datei = gcnew FileStream( Path, FileMode::Open );
    StreamReader^ reader = gcnew StreamReader( "server.properties" );
    

    bekomme ich die Fehlermeldung, dass die server.properties bereits von einem anderen Prozess benutzt wird.
    Was genau mach ich falsch?



  • Da FileStream ja keine relativen Pfadangaben unterstützt

    Das ist Humbug. Klar werden relative Pfäde unterstützt.

    Benutze \ (Backslash) anstelle / für die Pfadunterteilung.

    Simon



  • Zum Zusammensetzen von Pfaden benutze besser Path::Combine().

    Da sich das CurrentDirectory während des Programms ändern kann (z.B. durch einen OpenFileDialog), benutze besser Application::StartupPath.



  • theta schrieb:

    Da FileStream ja keine relativen Pfadangaben unterstützt

    Das ist Humbug. Klar werden relative Pfäde unterstützt.

    In C# vielleicht, das kann ich nicht beurteilen, aber in C++.Net devinitiv nicht.

    Ich habs jetzt übrigens gelöst, indem ich den FileStream rausgehauen hab.



  • Royal_Flush schrieb:

    In C# vielleicht, das kann ich nicht beurteilen, aber in C++.Net devinitiv nicht.

    Was ist das für ein Schwachsinn? Dem .Net Framework ist es vollkommen egal mit was es für eine Sprache benutzt wird.

    Warum? Bei mir gehts,

    #include "stdafx.h"
    
    using namespace System;
    
    int main(array<System::String ^> ^args)
    {
       System::IO::FileStream datei(".\\stdafx.h", System::IO::FileMode::Open);
    
       Console::WriteLine(datei.ReadByte()); // Beispieldatei Operation
    
       Console::WriteLine(L"Hello World");
       Console::ReadLine();
       return 0;
    }
    

    Klappt ohne Probleme, der Fehler liegt also nicht an C++.Net noch am .Net Framework!

    P.S.: Das "aktuelle" Verzeichnis ist aber (bei Standardeisntellungen) das Projektverzeichnis und nicht "$(ProjectDir)\Debug" o.ä..



  • Steht ja sogar in der Doku:
    http://msdn.microsoft.com/en-us/library/47ek66wy(v=VS.80).aspx

    MSDN schrieb:

    A relative or absolute path for the file that the current FileStream object will encapsulate.


Anmelden zum Antworten