命令行-ProcessStartInfo C#中文件名(而非路径)中的空格

本文关键字:路径 空格 -ProcessStartInfo 中文 文件名 命令行 | 更新日期: 2023-09-27 17:57:32

我正在使用C#的ProcessStartInfo运行ffmpeg,在那里我必须将文件从一种格式转换为另一种格式。那些没有空间的文件运行良好,但那些有空间的文件却陷入了错误。我认为这是由于文件名中的空格造成的。例如

  startInfo.Arguments = "-i " + filename+ ".mov-q:a 0 -map a " + filename+ ".mp4";

filename是在运行时通过解析目录派生的。典型的易出错文件名,例如is="这是我的文件"

如何解决这一问题。

命令行-ProcessStartInfo C#中文件名(而非路径)中的空格

您需要将文件名用引号括起来:

startInfo.Arguments = "-i '"" + filename+ ".mov'" -q:a 0 -map a '"" +
                      filename + ".mp4'"";

在C#中,字符串中的引号使用反斜杠("'"")进行转义,或者在逐字逐句的字符串中使用双引号(s = @"text ""quoted"" ...")进行转义。


考虑使用逐字逐句的字符串和C#6字符串插值:

startInfo.Arguments = $@"-i ""{filename}.mov"" -q:a 0 -map a ""{filename}.mp4""";

我认为它更可读(但这可能是品味的问题)。