2011-12-21 7 views
3

File.WriteAllText вставляет пробел после каждой буквы и цитаты.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); 
     } 
    } 
} 
+0

Что кодирование файла в первоначально? – Oded

+0

Возможно, исходный файл был написан под другой кодировкой. Попробуйте прочитать другой файл (например, который вы создали в блокноте, например) и попробовать разные кодировки при записи. –

+0

Как выглядит контент, прежде чем писать? Показываются ли там пробелы? – shf301

ответ

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

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

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

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

Это сделало трюк! Спасибо. –

0

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

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

1

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

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

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

0

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

0

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

string content = File.ReadAllText(@"C:\Documents and Settings\All Users\Application Data\Microsoft\Windows NT\MSFax\ActivityLog\OutboxLOG.txt", 
            System.Text.Encoding.Unicode); 
Смежные вопросы