Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 选择和转换XML编码的文件系统监视程序_C#_Xml - Fatal编程技术网

C# 选择和转换XML编码的文件系统监视程序

C# 选择和转换XML编码的文件系统监视程序,c#,xml,C#,Xml,我使用文件系统监视程序来选择和转换文件的编码,文件在目标位置被复制,但没有转换。我之前使用了以下代码: string xml = File.ReadAllText(FileName,ansi); XDocument xmlDoc = XDocument.Parse(xml); Console.WriteLine("1st"); File.WriteAllText( FileName,

我使用文件系统监视程序来选择和转换文件的编码,文件在目标位置被复制,但没有转换。我之前使用了以下代码:

 string xml = File.ReadAllText(FileName,ansi);
        XDocument xmlDoc = XDocument.Parse(xml);
             Console.WriteLine("1st");
              File.WriteAllText(
                 FileName,
                  @"<?xml version=""1.0"" encoding=""utf-8""?>" +  xml.ToString(),
                   utf8
               );


             if (File.Exists(destinationFile))
                    File.Delete(destinationFile);
                File.Copy(FileName, destinationFile,true);
                Console.WriteLine("File Copied" + "  " + DateTime.Now.ToString("HH:mm:ss tt")); // for troubleshoooting only
                Console.WriteLine("Press \'q\' to quit."); 
                Console.Write(CrL);

但这根本不是转换。目的地。文件仍然是ansi。它没有转换成utf8。我在这里做错了什么吗

您正在用以下代码编写的原始文件重写输出文件(由
XmlWriter编写的文件):

if (File.Exists(destinationFile))
    File.Delete(destinationFile);
File.Copy(fileName, destinationFile, true);
只需删除这些代码行

更新 使用Windows-1256编码编写XML文档:

var settings = new XmlWriterSettings
    {
        Encoding = Encoding.GetEncoding("windows-1256"),
        Indent = true
    };

“目标文件仍然是ansi。”如何检查它?使用记事本或记事本++。它仍然向我展示了ansiThe代码(使用
XmlWriter
类)工作得很好:它使用BOM以UTF-8编码创建XML文件(使用任何十六进制编辑器打开文件,您可以看到BOM-前三个字节)。另外,记事本++显示文件是UTF-8编码的。@Sergey Brunov:谢谢您的检查。但在我这边,我正在用记事本++检查目标文件,编码菜单中没有一个编码被勾选,这意味着对我来说它不是utf8。是否有其他方法检查此记事本++。也许我的方式错了。或者我可以把最终的dest文件发送给你,让你检查。你有哪个版本的记事本+(我现在有6.2.3)?您也可以尝试Notepad2文本编辑器(它在主窗口的状态栏中显示编码)。
if (File.Exists(destinationFile))
    File.Delete(destinationFile);
File.Copy(fileName, destinationFile, true);
var settings = new XmlWriterSettings
    {
        Encoding = Encoding.GetEncoding("windows-1256"),
        Indent = true
    };