C# - 用空格解析文件名的最简单方法,例如."C:\ Test\File with spaces.txt"

Dom*_*mra 8 c# string filenames spaces

我正在尝试将完整的文件路径传递给FFMPEG.

C:\TestFolder\Input\Friends - Season 6 - Gag Reel.avi
Run Code Online (Sandbox Code Playgroud)

并且它显然不喜欢路径中有空格的事实,错误如下:

C:\TestFolder\Input\Friends: no such file or directory
Run Code Online (Sandbox Code Playgroud)

那么使用带空格的文件名最简单的方法是什么?我应该用〜字符替换所有空格还是有更好的方法?我试过用各种字符转义字符串:

@"C:\TestFolder\Input\Friends - Season 6 - Gag Reel.avi";
Run Code Online (Sandbox Code Playgroud)

但这不起作用.有保留空间的技巧吗?

Mic*_*tta 33

您通常需要对具有空格的文件名进行任何特殊处理的唯一时间是将它们传递给外部工具或格式.例如,如果您正在构建外部可执行文件的参数列表,那么您只需引用路径:

string path = @"C:\TestFolder\Input\Friends - Season 6 - Gag Reel.avi";
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "program.exe";
psi.Arguments = "\"" + path + "\""; // escape the quotes
Run Code Online (Sandbox Code Playgroud)

...这将导致此命令行:

program.exe"C:\ TestFolder\Input\Friends - 第6季 - Gag Reel.avi"

  • 用"\""+ path +"\""包装最后的参数列表是一种享受.我知道的Nooby问题:P (2认同)

Nes*_*cio 7

System.IO.Path提供了几种操作文件名的方法......


Kev*_*ler 5

通常,在命令行上作为参数传递的文件路径需要用引号将路径括起来。

如果您正在谈论接受文件路径作为您程序的参数,最简单的方法是要求用户引用路径。这样,args您的 main 方法的参数将包含作为单个字符串的整个路径。

如果您正在调用其他程序并传递参数,则必须引用带空格的文件路径。

Process p = new Process();
p.StartInfo.FileName = "notepad.exe";
p.StartInfo.Arguments = string.Format("\"{0}\"", filePath);
p.Start();
Run Code Online (Sandbox Code Playgroud)


Ace*_*ark 5

你在FileInfo上课?

它包含(几乎)有关文件的所有内容,包括属性和文件版本,您不必担心空格或其他不需要的字符.只要该文件存在,它在FileInfo上运行良好.

用它作为
FileInfo f = new FileInfo(fullPathEvenWithSpaces);