使用 Filestream Filemode.Append 时,它会覆盖文件旁边的内容吗?

When using Filestream Filemode.Append does it overwrite what is lying next to the file?

让我们假设在 File-1-EOF 之后恰好 1 个字节开始另一个文件 (file2)。

如果我打开文件 1 并使用 FileStream Filemode.Append,它会覆盖文件 2 还是在有足够内存的地方制作另一个副本?

谢谢,问候!

编辑: 对于我之后的每个人:我忘了你有一个文件系统,它被分成块。把这个问题当成废话了!

If I open up file 1 and use FileStream Filemode.Append, does it overwrite file2 or does it make another copy at a place where there is enough memory?

谢天谢地没有。

这里简要概述原因:

您的 .NET C# 代码没有直接的 OS 级交互。

您的代码被编译成字节码,并在运行时由 .NET 运行时解释。

在运行期间,您的字节码由 .NET 运行时执行,该运行时主要结合 C#/C/C++ 构建。

运行时保护它所谓的 SafeHandles,它们是文件句柄的包装器,我可以假设是 window.h(至少对于 WIN32 应用程序),或任何 OS 级别的文件句柄提供程序,你的架构是 运行。

运行时使用这些句柄使用OS级别API读写数据。

OS 的工作是确保对 yourfile.txt 的更改,使用它提供给运行时的句柄,只影响该文件。

文件通常不存储在内存中,因此不会发生缓冲区溢出。

运行时可能使用内存中的缓冲区来...缓冲您的读写操作,但这由运行时实现,对文件和操作系统没有影响。

任何溢出此缓冲区的尝试都会受到运行时本身的保护,您的代码的执行将停止。不管怎样,如果缓冲区溢出成功地发生在这个缓冲区上——没有额外的字节将被写入底层句柄。相反,运行时可能会因内存访问冲突或一般未指定行为而停止执行。

您得到的句柄只不过是一个标记,OS 使用它来跟踪您要读取或写入字节的文件。

如果您尝试向文件写入比体系结构允许的更多字节 - 大多数操作系统都会有安全防护措施来结束您的进程、关闭文件或直接发送中断以使系统崩溃。

您似乎误以为文件是按顺序存储在磁盘上的,扩展一个文件可能会覆盖另一个文件的部分内容。当您通过 c# 中的文件流追加时,不会发生这种情况。操作系统会随心所欲地写入您添加的字节(并且它不喜欢覆盖其他文件),这就是文件最终被分解成更小的块(以及为什么要进行碎片整理)散布在整个磁盘上的原因。 None 您对此并不关心,因为 OS 将那些分散的文件片段作为单个连续的字节流呈现给任何想要读取它们的程序

当然,如果您编写的程序绕过 OS 并执行低级磁盘访问,找到文件的末尾,然后盲目地将更多字节写入它之后的位置,那么您将结束破坏其他文件,甚至 OS 精心策划的文件系统.. 但 .net 文件流不会使这成为可能

TLDR;添加您的字节,不用担心。保持文件系统井然有序不是你的工作