File.WriteAllText在每个字符后插入一个空格

时间:2011-12-21 14:50:40

标签: c# writealltext

File.WriteAllText在每个字母和引号后插入一个空格。

示例:

原始文件

"JobID" "ParentJobID"

新文件

" J o b I D "    " P a r e n t J o b I D "

CODE

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ProcessOutputLogTransfer
{
    class Program
    {
        static void Main(string[] args)
        {

            string content = File.ReadAllText(@"C:\Documents and Settings\All Users\Application Data\Microsoft\Windows NT\MSFax\ActivityLog\OutboxLOG.txt");

        File.WriteAllText(@"C:\FAXLOG\OutboxLOG.txt", content, Encoding.UTF8);
        }
    }
}

6 个答案:

答案 0 :(得分:8)

我不认为这是WriteAllText这样做的。我相信它是ReadAllText,默认使用UTF-8读取 - 我怀疑你的OutboxLOG.txt文件实际是用UTF-16编写的。试试这个:

string inputPath = @"C:\Documents and Settings\All Users\Application Data\"
                 + @"Microsoft\Windows NT\MSFax\ActivityLog\OutboxLOG.txt";
string outputPath = @"C:\FAXLOG\OutboxLOG.txt";

string content = File.ReadAllText(inputPath, Encoding.Unicode);
File.WriteAllText(outputPath, content, Encoding.UTF8);

答案 1 :(得分:1)

原始文件可能以Unicode(16位)

编码

尝试这样读:

  File.ReadAllText(@"C:\Documents and Settings\All Users\Application Data\Microsoft\Windows NT\MSFax\ActivityLog\OutboxLOG.txt",Encoding.Unicode);

答案 2 :(得分:1)

File.WriteAllText肯定不是那么严重的错误;如果是的话,人们就已经注意到了。

此处的直接问题是ReadAllText无法正确检测输入文件的编码。记录此方法是为了根据BOM的存在来检测编码,文档说明可以检测到编码格式UTF-8和UTF-32(big-endian和little-endian)。 < / p>

潜在的问题是,您今天不能简单地将文件视为“文本”,并且检测不是非常可靠并且并不总是有效;为了保证结果您还需要知道使用的编码。调用the other overload of ReadAllText,指定正确的编码参数,问题就解决了。

答案 3 :(得分:0)

如果您只是复制文件,请改用File.Copy。

话虽如此,这听起来像编码问题。尝试使用包含第二个参数的File.ReadAllText方法重载,该参数指定编码。确保在整个过程中使用相同的编码。

答案 4 :(得分:0)

为什么不使用ReadAllLines,而不是阅读所有文本

答案 5 :(得分:0)

试试这个:

string content = File.ReadAllText(@"C:\Documents and Settings\All Users\Application Data\Microsoft\Windows NT\MSFax\ActivityLog\OutboxLOG.txt",
                                  System.Text.Encoding.Unicode);