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).aspxMSDN schrieb:
A relative or absolute path for the file that the current FileStream object will encapsulate.