C#FileStream行为文件结束

时间:2013-01-09 11:03:27

标签: c# filestream

有一种C#Filestream的行为我不明白。我有一个文件。此文件包含长度为3的字符串。当我打开一个文件流并用一个长度为6个字符的字符串覆盖它时,它包含新字符串但只包含前三个字符。它被截断到前一个长度。

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.CreateCanWriteCanSeektrue;

修改

这里有一个编译的代码示例。我在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);

毕竟结果仍然是666而不是666666。

1 个答案:

答案 0 :(得分:0)

尝试使用

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

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