Использовать относительный путь в приложении Microsoft Surface? - PullRequest
1 голос
/ 29 декабря 2010

Я преобразовываю свой волновой файл в файл mp3 по следующему коду:

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

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

Ответы [ 3 ]

1 голос
/ 29 декабря 2010

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

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

.просто используйте

string lameEXE = @"lame.exe"
1 голос
/ 29 декабря 2010

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

В некоторых случаях рабочий каталог не идентичен каталогу приложения:

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

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

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

...
process.StartInfo.FileName =absolutePath;
...
1 голос
/ 29 декабря 2010

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

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

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

...