2010-12-29 5 views
1

ich konvertiere meine Wave-Datei in eine MP3-Datei durch den folgenden Code:Verwenden Sie relativen Pfad in Microsoft Surface-Anwendung?

internal bool convertToMp3() 
     { 
      string lameEXE = @"C:\Users\Roflcoptr\Documents\Visual Studio 2008\Projects\Prototype_Concept_2\Prototype_Concept_2\lame\lame.exe"; 
      string lameArgs = "-V2"; 

      string wavFile = fileName; 
      string mp3File = fileName.Replace("wav", "mp3"); 

      Process process = new Process(); 
      process.StartInfo = new ProcessStartInfo(); 
      process.StartInfo.FileName = lameEXE; 
      process.StartInfo.Arguments = string.Format("{0} {1} {2}", lameArgs, wavFile, mp3File); 

      process.Start(); 
      process.WaitForExit(); 

      int exitCode = process.ExitCode; 
      if (exitCode == 0) 
      { 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
     } 

Dies funktioniert, aber jetzt würde Ich mag nicht auf die lame.exe den vollständigen Pfad verwenden, sondern ein relativen Pfad. Ich habe eine lame.exe in den Ordner/lame/im Stammverzeichnis des Projekts eingefügt. Wie kann ich darauf verweisen?

Antwort

1

Wenn Sie Rechte haben Sie die Datei mit Ihrer Anwendung zu verteilen, dann einen Weg, es zu tun, die EXE-Datei als Element in Ihrem C# -Projekt, mit

Build Action = None 
Copy to Output Directory = Copy if newer 

einschließen würde können Sie dann einfach verwenden

string lameEXE = @"lame.exe" 
1

Angenommen, Ihre binäre App ist in Debug-Ordner und die Lahmen Ordner im Hauptprojektverzeichnis:

string lameEXE = @"..\..\lame\lame.exe 

Hovewer, werden die Ordner-Struktur wahrscheinlich in Ihrem Release-Version unterschiedlich sein.

+0

Die direkte Verwendung eines Pfads relativ zum Anwendungsverzeichnis ist eine schlechte Idee, da das Arbeitsverzeichnis möglicherweise nicht mit dem Anwendungsverzeichnis identisch ist. Dies kann zu Sicherheitslöchern führen. Sie sollten es also relativ zum Projektverzeichnis erweitern. In einfachen Fällen kann dies durch Verketten des relativen Pfads zum Anwendungsverzeichnis erfolgen. – CodesInChaos

+0

@CodeInChaos stimme völlig zu, wenn die App das Arbeitsverzeichnis durchkreuzt, sollte das OP genau das tun, was du geschrieben hast, sonst funktioniert es (in der Debug-Version natürlich) – nan

1

Direkt einen Pfad relativ zum Anwendungsverzeichnis verwendet, ist eine schlechte Idee, da das Arbeitsverzeichnis nicht auf das Anwendungsverzeichnis identisch sein könnte. Dies kann zu Fehlern und Sicherheitslücken führen. Zum Beispiel könnten Sie Dateien in nicht vertrauenswürdigen Verzeichnissen ausführen.

Einige Fälle, in denen das Arbeitsverzeichnis nicht identisch mit dem Anwendungsverzeichnis ist:

  • Der Benutzer öffnet aus dem Explorer eine Datei. Dann ist das Arbeitsverzeichnis das Verzeichnis, in dem sich die Datei befindet.
  • Abhängig von den Einstellungen Allgemeine Dialoge (OpenFileDialog, SaveFileDialog) ändern Sie das Arbeitsverzeichnis.

Sie sollten es also relativ zum Projektverzeichnis erweitern. Leider kenne ich keine saubere Bibliotheksfunktion, die das für Sie tut. In einfachen Fällen kann dies durch Verketten des relativen Pfads zum Anwendungsverzeichnis erfolgen:

string appDir = Path.GetDirectoryName(Environment.GetCommandLineArgs()[0]) + "\\"; 
const string [email protected]"..\..\lame.exe";//Whatever relative path you want 
string absolutePath=appDir+relativePath; 

... 
process.StartInfo.FileName =absolutePath; 
... 
Verwandte Themen