0

我有以下代码片段:

    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(...) 来验证每个文件是否存在。

4

1 回答 1

0

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

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

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

于 2013-02-08T16:35:28.550 回答