【问题标题】:C# spaces in path路径中的 C# 空格
【发布时间】:2012-01-17 08:49:02
【问题描述】:

我已经看到了几十个关于这个主题的问题和答案,但我仍然无法解决我的问题。

我在我的代码中使用了一个外部 ffmpeg 转换器,并且我正在传递一个文件路径作为这样的参数:

OutputPackage oo = converter.ConvertToFLV(@"C:\Users\user\Documents\test Video\video.wmv");

当“测试视频”文件夹名称中没有空格时,它可以正常工作。但是当它像上面一样时,我收到一个错误,C:\Users\user\Documents\test 不是有效路径。

用引号括起来,例如:

@"""C:\Users\user\Documents\test Video\video.wmv""" 

结果

视频文件“C:\Users\user\Documents\test Video\video.wmv”不存在。

我也试过不带“@”:

"\"C:\\Users\\user\\Documents\\test Video\\video.wmv\""

但结果是一样的。

Path.Combine("C:\\Users\\user\\Documents\\test Video\\video.wmv")
"\""+Path.Combine("C:\\Users\\user\\Documents\\test Video\\video.wmv")+"\""

也不行。 同时运行 Windows 控制台形式的进程,如

ffmpeg.exe "C:\Users\user\Documents\test Video\video.wmv"

工作得很好。

更新: 该方法使用这样的字符串:

public OutputPackage ConvertToFLV(string inputPath)
{
    VideoFile vf = null;
    try
    {
        //string path = string.Format("{0}", inputPath);
        vf = new VideoFile(inputPath);
    }
    catch (Exception ex)
    {
        throw ex;
    }

    OutputPackage oo = ConvertToFLV(vf);
    return oo;
}

在视频文件类中,这里抛出异常:

if (!File.Exists(_Path))
{
    throw new Exception("The video file " + _Path + " does not exist.");
}

【问题讨论】:

  • 试试正斜杠。 / 而不是 `\`
  • 试试正斜杠?? c:/dir/文件
  • @"" 字符串文字表示法是编译器的事情。使用它还是转义 `` 的每个 sincle 实例都没有关系,结果字符串是相同的。无论如何,这听起来像是您正在使用的库中的错误。
  • ConvertToFLV 方法也可能有问题。可以贴出方法的代码吗?
  • 您是否正在尝试查看其他用户的文件?

标签: c# path


【解决方案1】:

可能是converter.ConvertToFLV 没有正确处理带有空格的路径名。你可以尝试给它8.3 pathname,它没有空格

【讨论】:

  • 看起来 File.Exists 方法不适用于所有这些字符串。当我删除检查一切正常(但是我认为不检查文件是否存在或不在应用程序级别不是克服这个问题的正确方法)
  • @Matt:您应该将此作为答案发布,以使其对将来可能遇到相同问题的其他人有用。
【解决方案2】:

好的,结束主题...

虽然像 ffmpeg 这样的外部任务需要将包含空格的路径放在 qoutes "path" 中(因为 Windows 控制台将空格视为参数之间的分隔符),但 C# 中使用的方法 File.Exists() 不接受引号在路径中,并且适用于路径中的空格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 2015-06-13
    • 2015-04-10
    • 2012-05-09
    相关资源
    最近更新 更多