-3

Filestream私が得ていないC#の動作があります。ファイルがあります。このファイルには、長さ 3 の文字列が含まれています。ファイル ストリームを開いて 6 文字の長さの文字列で上書きすると、新しい文字列が含まれますが、最初の 3 文字だけが含まれます。前の長さに切り捨てられます。

using (FileStream fs = File.open(rootPath + filePath, FileMode.Truncate, FileAccess.Write, FileShare.None))
{
   bool write = fs.CanWrite;
   bool canSeek = fs.CanSeek;

   byte[] data = Encoding.ASCII.GetBytes(sixchars);

   fs.Write(data, 0, data.Length);
   fs.Flush();               
}

では、なぜそうなるのか、どうすれば回避できるのでしょうか?

私も一緒にやってみましたFileMode.CreateCanWriteそしてCanSeekですtrue

編集

ここで、コンパイルするコード サンプルを示します。Windowsエクスプローラーでファイルを作成し、以前に「123」と書きました。

 string  path = @"C:\1\test.txt";

 using (FileStream fs = File.Open(path , FileMode.Truncate, FileAccess.Write, FileShare.None))
        {
            byte[] data = Encoding.ASCII.GetBytes("666666");

            fs.Write(data, 0, data.Length);
            fs.Flush();
        }

私も試しました

            File.WriteAllText(path , "666666");

            byte[] datas = Encoding.ASCII.GetBytes("666666");
            File.WriteAllBytes(path , datas);

結局、結果は 666666 ではなく 666 のままです。

4

1 に答える 1

0

使用してみてください

File.WriteAllText(Path.Combine(rootPath, filePath), sixchars, Encoding.ASCII);

File.WriteAllBytes(Path.Combine(rootPath, filePath), Encoding.ASCII.GetBytes(sixchars));
于 2013-01-09T11:33:21.483 に答える