File.WriteAllText вставляет пробел после каждого символа - PullRequest
3 голосов
/ 21 декабря 2011

File.WriteAllText вставляет пробел после каждой буквы и кавычки.

Пример:

Исходный файл

"JobID" "ParentJobID"

Новый файл

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

код

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 ]

8 голосов
/ 21 декабря 2011

Я не думаю, что это 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 голос
/ 21 декабря 2011

File.WriteAllText определенно не так ужасно глючит;если бы это было так, люди бы уже заметили.

Непосредственная проблема здесь в том, что ReadAllText неправильно определяет кодировку вашего входного файла.Этот метод документирован для обнаружения кодировок на основе наличия спецификаций, и в документации говорится, что можно обнаружить форматы кодирования UTF-8 и UTF-32 (как с прямым порядком байтов, так и с прямым порядком байтов).

Основная проблема заключается в том, что вы не можете просто рассматривать файлы как «текст» сегодня, и обнаружение не очень надежно и не всегда работает;для гарантированных результатов вам также необходимо знать используемую кодировку .Вызовите другую перегрузку ReadAllText, указав правильный параметр кодировки, и проблема будет решена.

1 голос
/ 21 декабря 2011

Исходный файл, вероятно, закодирован в Unicode (16 бит)

Попробуйте прочитать его так:

  File.ReadAllText(@"C:\Documents and Settings\All Users\Application Data\Microsoft\Windows NT\MSFax\ActivityLog\OutboxLOG.txt",Encoding.Unicode);
0 голосов
/ 21 декабря 2011

Попробуйте это:

string content = File.ReadAllText(@"C:\Documents and Settings\All Users\Application Data\Microsoft\Windows NT\MSFax\ActivityLog\OutboxLOG.txt",
                                  System.Text.Encoding.Unicode);
0 голосов
/ 21 декабря 2011

Почему бы не использовать ReadAllLines, который бы работал у вас вместо чтения всего текста

0 голосов
/ 21 декабря 2011

Если вы просто копируете файл, используйте вместо него File.Copy.

При этом это звучит как проблема с кодировкой.Попробуйте использовать перегрузку метода File.ReadAllText, которая включает второй аргумент, который задает кодировку.Убедитесь, что вы используете одну и ту же кодировку на протяжении всего процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...