首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FileStream和StreamWriter -如何在写入后截断文件的其余部分?

FileStream和StreamWriter -如何在写入后截断文件的其余部分?
EN

Stack Overflow用户
提问于 2011-12-11 21:20:46
回答 3查看 9.5K关注 0票数 20
代码语言:javascript
运行
复制
var fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
using(var writer = new StreamWriter(fs))
    writer.Write(....);

如果文件以前包含的文本和新编写的文本比文件中已有的文本短,如何确保文件中过时的尾随内容被截断?

请注意,在这种情况下,以截断模式打开文件不是一个选项。当我收到FileStream对象时,该文件已经打开。上面的代码只是为了说明流的属性。

编辑

根据下面的答案展开,解决方案是:

代码语言:javascript
运行
复制
var fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
using(var writer = new StreamWriter(fs))
{
    writer.Write(....);
    writer.Flush();
    fs.SetLength(fs.Position);
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-11 21:29:45

使用SetLength设置文件的新长度-文件应被截断。

请参阅相关问题的this answer

票数 17
EN

Stack Overflow用户

发布于 2011-12-11 21:29:07

你可以试试writer.BaseStream.SetLength(writer.BaseStream.Position),尽管我不确定它会有多好。

对于FileStream,我认为这应该将文件截断到当前位置。

票数 4
EN

Stack Overflow用户

发布于 2017-03-16 23:48:46

如果日志文件的大小超过1 MB,此代码将截断该文件的一部分。

代码语言:javascript
运行
复制
using (FileStream fs = File.Open("C:\\LogFile.txt", FileMode.OpenOrCreate))
        {
            int OneMB = 1000000;

            fs.Seek(0, SeekOrigin.Begin);
            if (fs.Length > OneMB)
            { 
                int fileByte = 1;
                fs.Position  = fs.Seek(fs.Length / 2, SeekOrigin.Begin);
                List<byte> bytes = new List<byte>();

                while (fileByte > 0)
                {
                   fileByte = fs.ReadByte();
                   bytes.Add((byte)fileByte);
                }

                fs.SetLength(0);
                fs.Position = 0;
                fs.Write(bytes.ToArray(), 0, bytes.Count());

                fs.Seek(0, SeekOrigin.End);
                var stringBytes =  UTF8Encoding.ASCII.GetBytes($"Test1" + Environment.NewLine);
                fs.Write(stringBytes, 0, stringBytes.Length);  
            }
            else
            {
                fs.Seek(0, SeekOrigin.End);
                var stringBytes = UTF8Encoding.ASCII.GetBytes($"Test2" + Environment.NewLine);
                fs.Write(stringBytes, 0, stringBytes.Length); 
            }

            fs.Flush();
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8464261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档