2011-07-15 18 views
0

xsltransformで問題が発生した場合の対処方法が分かりません。私のテスト環境ではすべてが機能しますが、別のプログラムから出力されるファイル名のためにサーバ上で実行するとクラッシュします。XSLTファイル名の処理C#

たとえば、 "4Copy(2)of Fed_Around_Six__TFVC020-12.mov.xml"という単純な方法で解決できますが、実際にはサービス上で実行されています。このサービスは、そのタイプのすべてのファイルをディレクトリに取得し、1つずつ処理します。

string[] filepaths = Directory.GetFiles(path, Filetype); 

私は、ファイル名の変数を保つ:

FileInfo f = new FileInfo(filepaths[i]); 

しかし、私は変換に使用する方法:それは「4Copy(2見たとき

myXslTransform = new XslCompiledTransform(); 
myXslTransform.Transform(filename,OutputFileName); 

のみこれ(String, String)を受け入れ、 )of Fed_Around_Six__TFVC020-12.mov.xml "それは心臓発作を起こし、それをカットします。

私は元の名前を保存し、名前を変更し、空白を削除し、変換し、名前を変更すると考えていました。しかし、私はそこにそれを処理するよりスマートな方法があると思う、ちょうどどこを見るかわからない。変数をリテラルとして扱うようにC#に指示する方法はありますか?あるいは、これらの奇妙なファイル名を非常に悪い命名規則で受け入れる別の変換方法ですか?

洞察力があれば助かります。

私はeventvwrとから受け取るエラー&例外メッセージが

である(2)Fed_Around_Six__TFVC020-12.mov.xml

OutputName = \\ 9g031の \\ 9g031 \輸出\ 4Copyを翻訳することはできません\ \ CXS.xsl

System.IO.IOException:指定されたパスが無効である輸出は\ \ 4Copy(2)Fed_Around_Six__TFVC020-12.mov.xml

のXSLのLOC = Cを行います。

   private void PreformTranslation(FileInfo FileName, String OutputFileName , String result) 
    { 
     try 
     { 
      XslCompiledTransform myXslTransform; 
      myXslTransform = new XslCompiledTransform(); 
      myXslTransform.Load(XSLname); 
      EventLog.WriteEntry(FileName.ToString(), OutputFileName); 
      myXslTransform.Transform(FileName.Name,OutputFileName); 
      EventLog.WriteEntry("TranslationComplete"); 


      if (File.Exists(path + result)) 
      { 
       MoveVideoFiles(path + result, outputPath + result); 
      } 
      // Rename(OutputFileName, FileName, Out); 
     } 
     catch (Exception e) 
     { 

      EventLog.WriteEntry("Cannot Translate " + FileName + " OutputName = " + OutputFileName + " \r\n"+ 
       "XSL LOC = " + XSLname + "\r\n" + e); 
     } 
    } 
+0

放棄またはエラーが発生した場合は、投稿してください。 –

+4

'' Fed_Around_Six__TFVC020-12.mov.xmlの "4Copy(2)" '_ _文字列であり、有効なファイル名です。例外は引数の型や '@'とは関係ありません。 「心臓発作がある」ということを正確に教えてください。 –

+1

これはちょっと明白なようですが、 'XslCompiledTransform'のインスタンス化と変換の間に何かがあると思いますか?つまり、スタイルシートをその中にロードしますか?もしそうでなければ、それはあなたの問題かもしれないと思います。 – Flynn1179

答えて

0

デフォルトのディレクトリサービスを実行している「窓/ system32に」のようなものであり、これは実行可能ファイルのディレクトリではありません。

これはおそらくXMLファイルが見つからない理由です。

+0

xmlパスは正しかったですが、翻訳するために間違ったファイル名を渡していましたが、Filename.Nameの代わりに完全修飾名を渡していないため、サービスはsystem32ディレクトリを調べました。Filename.toString() 。ありがとう。 – user685590

+0

@ user685590:はい、これは私が言っていることです。 Windowsでは、「通常の」exeはexeファイルが存在するディレクトリをデフォルトの(現在の)ディレクトリとして持ちます。相対ファイルパスはこのデフォルトディレクトリから解決されます。 Windowsサービスexeのデフォルトのディレクトリは "windows \ system32"で、相対ファイルパスが実行ファイルが置かれているディレクトリから解決されることを期待しているプログラムは問題になります。 –