0

想知道如何最好地处理我在使用 xsltransform 时遇到的问题。长话短说,一切都在我的测试环境中运行,但是当我在服务器上运行它时它崩溃了,因为它试图处理的文件名是另一个程序的输出,我无法控制。

例如。"4Copy (2) of 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),因此当它看到“Fed_Around_Six__TFVC020-12.mov.xml 的 4Copy (2)”时,它会心脏病发作并将其切断。

我在考虑保存原始名称,重命名,删除空格,转换并重命名。但我认为有一种更聪明的方法来处理它,只是不知道在哪里看。有没有办法告诉 C# 将变量作为文字处理?还是一种不同的转换方法接受这些具有非常糟糕的命名约定的奇怪文件名?

任何有帮助的见解都会很棒!

我从 Eventvwr 收到的错误和异常消息是

无法翻译 \\9g031\Export\4Fed_Around_Six__TFVC020-12.mov.xml 的副本 (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);
        }
    }
4

1 回答 1

0

运行服务时的默认目录类似于“windows/system32”,这不是可执行文件的目录。

这可能是找不到 XML 文件的原因。

于 2011-07-15T13:12:28.790 回答