2011-07-15 1 views
0

Подумайте, как лучше всего справиться с проблемой, которую я испытываю с помощью xsltransform. Короче говоря, все работает в моей тестовой среде, но он сбой, когда я запускаю его на сервере из-за имен файлов, с которыми он пытается справиться, которые выводятся из другой программы, над которыми я не контролирую.Обработка имен файлов XSLT C#

Например. «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 \ Экспорт \ сделано \ 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); 
     } 
    } 
+0

Если вы получаете сообщение об ошибке или ошибке, отправьте его. –

+4

'' 4Copy (2) от Fed_Around_Six__TFVC020-12.mov.xml "' _is_ a строка, а также действительное имя файла. Ваше исключение не имеет ничего общего с типами аргументов или '@'. Пожалуйста, скажите, что именно вы имеете в виду под «сердечным приступом». –

+1

Это может показаться немного очевидным, но я полагаю, что существует нечто среднее между созданием «XslCompiledTransform» и выполнением преобразования? т. е. загружать в нее таблицу стилей? Если нет, я думаю, что это может быть вашей проблемой. – Flynn1179

ответ

0

Каталог по умолчанию при запуске службы - это что-то вроде «windows/system32», и это не каталог исполняемого файла.

Возможно, это причина, по которой XML-файл не найден.

+0

Путь xml был прав, но я передавал ему неправильное имя файла для его перевода, служба смотрела в директории system32, потому что я не передавал ему полное имя вместо Filename.Name должно быть Filename.toString() , Благодарю . – user685590

+0

@ user685590: Да, это то, что я говорю. В Windows «обычный» exe имеет в качестве каталога по умолчанию (текущий) тот, в котором находится exe-файл. Любые относительные пути к файлу устраняются из этого каталога по умолчанию. Дирекцией по умолчанию для службы exe exe является «windows \ system32», и любая программа, ожидающая, что ее относительные пути к файлам будут удалены из каталога, в котором находится исполняемый файл, находится в беде. –

Смежные вопросы