2010-12-29 6 views
1

преобразовать мой файл волны в mp3 файл следующим кодом:Использовать относительный путь в приложении Microsoft Surface?

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; 
      } 
     } 

Это работает, но теперь я хотел бы, чтобы не использовать путь ABSOLUT к lame.exe, но относительный путь. Я включил lame.exe в папку/lame/в корневой каталог проекта. Как я могу ссылаться на него?

ответ

1

Если у вас есть права на распространение файла с приложением, а затем один из способов сделать это будет включать в EXE-файл в качестве элемента в проекте C#, с

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

Вы можете просто использовать

string lameEXE = @"lame.exe" 
1

Предполагая, что ваше бинарное приложение находится в папке Debug и хромая папка находится в главном каталоге проекта:

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

Hovewer, папки структура будет, вероятно, отличается в вашей версии.

+0

Непосредственно используя путь относительно каталога приложений является плохой идеей, так как рабочий каталог не может быть идентичным каталог приложений. Это может привести к нарушениям безопасности. Поэтому вы должны расширить его относительно каталога проекта. В простых случаях это можно сделать, объединив относительный путь к каталогу приложения. – CodesInChaos

+0

@CodeInChaos полностью согласен, если приложение беспорядочно работает с рабочим каталогом, OP должен делать то, что вы написали, в противном случае он будет работать (в версии Debug, конечно) – nan

1

Непосредственно используя путь относительно каталога приложений является плохой идеей, так как рабочий каталог не может быть идентичным каталог приложений. Это может привести к ошибкам и дырам в безопасности. Например, вы можете выполнять файлы в ненадежных каталогах.

Некоторые случаи, когда рабочий каталог не является идентичным каталог приложений:

  • Пользователь открывает файл из Проводника. Тогда рабочий каталог - это каталог, в котором находится файл
  • В зависимости от настроек Общие диалоги (OpenFileDialog, SaveFileDialog) изменяют рабочий каталог.

Поэтому его следует развернуть относительно каталога проекта. К сожалению, я не знаю никакой чистой функции библиотеки, которая делает это для вас. В простых случаях это может быть сделано путем конкатенации относительный путь к директории приложения:

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; 
... 
Смежные вопросы