文件流行为文件结束
本文关键字:文件 结束 流行 | 更新日期: 2023-09-27 17:51:02
我不明白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.Create
试过。CanWrite
和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);
结果仍然是666而不是666666。
尝试使用
File.WriteAllText(Path.Combine(rootPath, filePath), sixchars, Encoding.ASCII);
File.WriteAllBytes(Path.Combine(rootPath, filePath), Encoding.ASCII.GetBytes(sixchars));