3

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);
        }
    }
}
4

6 に答える 6

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);
于 2011-12-21T14:52:41.710 に答える
1

元のファイルはおそらく Unicode (16 ビット) でエンコードされています

次のように読んでみてください。

  File.ReadAllText(@"C:\Documents and Settings\All Users\Application Data\Microsoft\Windows NT\MSFax\ActivityLog\OutboxLOG.txt",Encoding.Unicode);
于 2011-12-21T14:52:09.793 に答える
1

File.WriteAllText確かにそれほどひどいバグではありません。もしそうなら、人々はすでに気づいているでしょう。

ここでの差し迫った問題はReadAllText、入力ファイルのエンコーディングを正しく検出しないことです。このメソッドは、BOM の存在に基づいてエンコーディングを検出するように文書化されており、ドキュメントには、エンコーディング形式 UTF-8 および UTF-32 (ビッグエンディアンとリトルエンディアンの両方) を検出できると記載されています。

根底にある問題は、現在、ファイルを単純に「テキスト」として扱うことができず、検出の信頼性が低く、常に機能するとは限らないことです。保証された結果を得るには、使用されているエンコーディングも知っておく必要があります。正しいエンコーディング パラメータを指定して の他のオーバーロードをReadAllText呼び出すと、問題は解決されます。

于 2011-12-21T14:55:53.237 に答える
0

すべてのテキストを読む代わりに、ReadAllLinesを使用してみませんか

于 2011-12-21T15:01:11.493 に答える
0

これを試して:

string content = File.ReadAllText(@"C:\Documents and Settings\All Users\Application Data\Microsoft\Windows NT\MSFax\ActivityLog\OutboxLOG.txt",
                                  System.Text.Encoding.Unicode);
于 2011-12-21T15:01:21.453 に答える
0

ファイルをコピーするだけの場合は、代わりに File.Copy を使用してください。

そうは言っても、これはエンコードの問題のように聞こえます。エンコーディングを指定する 2 番目の引数を含む File.ReadAllText メソッド オーバーロードを使用してみてください。プロセス全体で同じエンコーディングを使用していることを確認してください。

于 2011-12-21T14:53:12.943 に答える