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

したがって、基本的にここで何が起こっているかは、C# のプロセス オブジェクトを介して MediaInfo を起動すると、ネットワーク パスが適切に解決されないということです。メディア ファイルがローカルの場合、大きな xml ドキュメントが返され、そのファイルが発生した場合ローカルにしないと、空のように見える xml ドキュメントが取得されます。

最後に、File.Exists(...) を使用して、各ファイルが存在するかどうかを確認しています。

4

1 に答える 1

0

UNCパスのスペースの単純なケースであることがわかりました-=|

c#コードは健全でした。アプリケーション、つまりac#コマンドラインアプリケーションを介してUNCパスを介してネットワークリソースにアクセスする場合、内部かどうかに関係なく、UNCパスがパラメータとして渡されます。パスにスペースが含まれている場合は、二重引用符で囲む必要があります。

それ以外の場合、二重引用符なしで、パラメータまたはハードコードされた値としてどこかに渡されたパスは、その中にスペースを入れてはなりません!それ以外の場合は機能しません。

于 2013-02-08T16:35:28.550 に答える