私がxsltransformで抱えている問題に最もよく対処する方法を考えています。簡単に言えば、すべてが私のテスト環境で機能しますが、サーバーで実行しようとすると、処理しようとするファイル名が原因でクラッシュします。ファイル名は、私が制御できない別のプログラムから出力されます。
例えば。「4Copy(2)of Fed_Around_Six__TFVC020-12.mov.xml」単純な@でこれを解決できますが、実際にはサービスで実行されており、このサービスはディレクトリ内のそのタイプのすべてのファイルを取得し、それらを1つずつ処理します。
string[] filepaths = Directory.GetFiles(path, Filetype);
私はファイル名変数を次の場所に保持します:
FileInfo f = new FileInfo(filepaths[i]);
しかし、私が変換に使用する方法は次のとおりです。
myXslTransform = new XslCompiledTransform();
myXslTransform.Transform(filename,OutputFileName);
受け入れるだけ(String, String)
なので、「Fed_Around_Six__TFVC020-12.mov.xmlの4Copy(2)」が表示されると、心臓発作を起こして切断します。
元の名前を保存し、名前を変更し、空白を削除し、変換して、名前を元に戻すことを考えていました。しかし、どこを見ればよいかわからないので、それを処理するためのより賢い方法があると思います。変数をリテラルとして処理するようにC#に指示する方法はありますか?または、命名規則が非常に悪いこれらの奇妙なファイル名を受け入れる別の変換方法ですか?
役立つ洞察は素晴らしいでしょう!
Eventvwrから受け取ったエラーと例外のメッセージは
Fed_Around_Six__TFVC020-12.mov.xmlの\\9g031\ Export \ 4Copy(2)を翻訳できません
OutputName = \\ 9g031 \ Export \ done \ 4Fed_Around_Six__TFVC020-12.mov.xmlのコピー(2)
XSL LOC = C:\ CXS.xsl
System.IO.IOException:指定されたパスが無効です。
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);
}
}