【问题标题】:How to resolve unc paths via a C# Process Class?如何通过 C# 进程类解析 unc 路径?
【发布时间】:2013-02-11 22:11:32
【问题描述】:

我有以下sn-p的代码:

    private XDocument CreateXmlForMediaFile(string mediaFilePath)
    {
        var args = string.Format("-f {0} --Output=XML", mediaFilePath);

        var miProcess = new Process
        {
            StartInfo = new ProcessStartInfo()
            {
                Arguments = args,
                FileName = _mediaInfoPath, // path to where MediaInfo.exe is located.
                RedirectStandardOutput = true,
                CreateNoWindow = true,
                UseShellExecute = false
            }
        };
        // create and instantiate a new xdocument that contains our results for the current manifest.
        miProcess.Start();
        var newXDoc = XDocument.Load(miProcess.StandardOutput);

        return newXDoc;
    }

无论何时

mediaFilePath = 本地路径 = 返回完整的 xml 文档。

例如 C:\temp\input\ABC001.mp3

但是

mediaFilePath = unc 路径,在某处的服务器上 = 返回空的 xml 文档。

例如 \\w2k-testharness\SAMI Testdata\CarrierBased\ABC001.mp3

所以基本上我可以告诉这里发生的事情是,当 MediaInfo 通过 c# 中的进程对象启动时,它没有正确解析网络路径,因为当媒体文件是本地的时,会返回一个大的 xml 文档,如果该文件恰好不是本地文件,然后我们得到一个空的 xml 文档。

最后,我使用 File.Exists(...) 来验证每个文件是否存在。

【问题讨论】:

    标签: c# command-line


    【解决方案1】:

    原来这是一个简单的 UNC 路径中的空格 - = |

    c# 代码是正确的。事实证明,如果您通过应用程序通过 UNC 路径访问网络资源,即 C# 命令行应用程序,无论是否内部,并且您的 UNC 路径作为参数传入。 如果路径中有空格,应该用双引号括起来。

    否则,如果没有双引号,您的路径作为参数或硬编码值传入某处,其中不得有任何空格!否则将无法正常工作。

    【讨论】:

    • 您永远不应该将路径作为不带引号的参数传递。避免引号是将错误引入程序的好方法。如果您设法使您的程序在不传递这些引号的情况下运行,请认为自己很幸运。
    猜你喜欢
    • 2012-09-09
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    相关资源
    最近更新 更多