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);
}
}
}
答案 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);