我通过以下代码将我的wave文件转换为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 /文件夹中包含了一个lame.exe。我该如何参考呢?
答案 0 :(得分:1)
假设您的二进制应用程序位于Debug文件夹中,而lame文件夹位于主项目目录中:
string lameEXE = @"..\..\lame\lame.exe
Hovewer,您的发布版本中的文件夹结构可能会有所不同。
答案 1 :(得分:1)
如果您有权使用您的应用程序分发文件,那么一种方法是将.exe文件作为项目包含在C#项目中,
Build Action = None
Copy to Output Directory = Copy if newer
然后您可以使用
string lameEXE = @"lame.exe"
答案 2 :(得分:1)
直接使用相对于应用程序目录的路径是个坏主意,因为工作目录可能与应用程序目录不同。这可能会导致错误和安全漏洞。例如,您可以在不受信任的目录中执行文件。
工作目录与应用程序目录不同的一些情况:
所以你应该相对于项目目录展开它。不幸的是,我知道没有干净的库函数可以帮到你。在简单的情况下,这可以通过连接应用程序目录的相对路径来完成:
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;
...