Frage

Relative Pfade in C # handeln verrückt für mich. In einem Fall der Handhabung Im einen Satz von Texture2D Objekten meiner App, ihren die Dateinamen zu nehmen und mit dieser die Dateien zu finden und die Texturen in Bildobjekte zu laden. Ich habe dann in der Klassendatei gespeichert, ein Bild von einem relativen Pfad laden und einen relativen Pfad verwenden, der zum Inhalt / gfx seine relativ muss. Aber wenn ich diese Texturen laden nicht werden diese relativen Pfade versagen. Wie kann ich garuantee, dass mein rel Pfad wird nicht scheitern? In Web-Arbeit sind alle rel Pfade relativ zu dem Ordner der Datei aus arbeiten wir in ist, kann ich es einstellen auf diese Weise und mache alle rel Pfade zum Stammordner, wo mein app ist?

War es hilfreich?

Lösung

Ich empfehle nicht relative Pfade in erster Linie verwendet wird.

Verwenden Sie Path.Combine drehen Ihre relative Pfade in absolute Pfade. Zum Beispiel können Sie diese verwenden Sie den vollständigen Pfad zu Ihrer Start-EXE zu bekommen:

string exeFile = (new System.Uri(Assembly.GetEntryAssembly().CodeBase)).AbsolutePath;

Sobald Sie das haben, können Sie bekommen es ist Verzeichnis:

string exeDir = Path.GetDirectoryName(exeFile);

und schalten Sie die relativen Pfad in einen absoluten Pfad:

string fullPath = Path.Combine(exeDir, "..\\..\\Images\\Texture.dds");

Dies wird sehr viel zuverlässiger als zu versuchen, relative Pfade zu verwenden.

Andere Tipps

Wenn Sie eine Ressource erwarten im selben Verzeichnis wie die ausführbare Datei sein oder in einem Unterverzeichnis des Verzeichnisses, es ist am besten verwenden immer

string fullPath = System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), subPath);

oder wenn Sie besorgt sind, dass das Arbeitsverzeichnis falsch sein könnte, dies zu tun:

string fullPath = System.IO.Path.Combine(System.Reflection.Assembly.GetEntryAssembly().Location, subPath);

// [name space] ist Namensraum       // Sie sollten Ihre Datei kopieren .-- in Depug Datei

      string path = (Assembly.GetEntryAssembly().Location + "");
      path = path.Replace("name space", "filename.--");


      // [WindowsFormsApplication4] is name space 
      //you should copy your "mysound.wav" into Depug file 

         //example::
       string path_sound  = (Assembly.GetEntryAssembly().Location + "");
      path_sound  = path_sound.Replace("WindowsFormsApplication4.exe", "mysound.wav");

      SoundPlayer player1 = new SoundPlayer(path_sound);
      player1.Play();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top