Хотите знать, как наилучшим образом справиться с проблемой, с которой я столкнулся в xsltransform. Короче говоря, все работает в моей тестовой среде, но происходит сбой, когда я запускаю его на сервере из-за имен файлов, с которыми он пытается работать, которые выводятся из другой программы, над которой у меня нет контроля.
Например. «4Copy (2) из Fed_Around_Six__TFVC020-12.mov.xml» простой @ решит эту проблему, но на самом деле он работает в службе, и эта служба получает все файлы этого типа в каталоге и обрабатывает их один за другим.
string[] filepaths = Directory.GetFiles(path, Filetype);
Я сохраняю переменную имени файла в:
FileInfo f = new FileInfo(filepaths[i]);
Но метод, который я использую для преобразования:
myXslTransform = new XslCompiledTransform();
myXslTransform.Transform(filename,OutputFileName);
Принимает только (String, String)
, и поэтому, когда он видит «4Copy (2) из Fed_Around_Six__TFVC020-12.mov.xml», у него случается сердечный приступ, и он отключается.
Я думал сохранить исходное имя, переименовать, удалить пробелы, преобразовать и переименовать обратно. Но я думаю, что есть более разумный способ справиться с этим, просто не знаю, где искать. Есть ли способ сказать C # обрабатывать переменную как литерал? Или другой метод преобразования, который принимает эти странные имена файлов с очень плохими соглашениями об именах?
Любое понимание, которое поможет, было бы здорово!
Сообщение об ошибке и исключении, которое я получаю от Eventvwr:
Невозможно перевести
\\ 9g031 \ Export \ 4Copy (2) Fed_Around_Six__TFVC020-12.mov.xml
OutputName = \\ 9g031 \ Export \ done \ 4Copy (2) из Fed_Around_Six__TFVC020-12.mov.xml
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);
}
}