【问题标题】:File size after File.WriteAllBytes finishes on mapped network driveFile.WriteAllBytes 在映射网络驱动器上完成后的文件大小
【发布时间】:2016-08-22 19:03:06
【问题描述】:

我使用File.WriteAllBytes 创建一个文件“somefile.txt”。这是否意味着当 File.WriteAllBytes 从执行返回时,传递给 File.WriteAllBytes 的字节实际上在磁盘上?例如,我用 File.WriteAllBytes("somefile.txt", bytes) 写入 X 个字节,然后检查磁盘上文件的大小,如果大小等于 bytes.length。如果等于,我假设文件已完全写入磁盘。

假设字节大小为 1.5GB,在机器上写入这样的数量需要一段时间;写入文件的磁盘是映射的网络驱动器。 是否可能 File.WriteAllBytes 从执行返回,但操作系统仍在向磁盘写入字节?

【问题讨论】:

  • 我不这么认为,因为File.WriteAllBytes 在写入字节后关闭文件
  • @Pikoh 方法 close() 是否等待传递的字节实际写入磁盘?
  • 我认为 close 首先将所有写入缓冲区的数据复制到磁盘,然后释放所有资源。我不相信它有办法检查它的字节是否已写入,但我认为它们是。
  • 无论如何..你为什么要问这个?如果您有特定问题,我认为您应该询问该问题
  • @Pikoh 我正在将文件写入映射的网络驱动器。为了显示文件已完全写入,我在调用 File.WriteAllBytes 后立即获取 DateTime.Now 并将其放入属性 WritingEnded。这里我假设 File.WriteAllBytes 返回后字节实际上在磁盘上,即WritingHasEnded。 我想摆脱这种假设 :)。

标签: c# file operating-system byte hard-drive


【解决方案1】:

是的,在您的编程 API 中完成写入后,操作系统可能(或可能不会)实际上仍在写入磁盘,这是完全正常的。 不过,这实际上不是您关心的问题。如果您询问大小,您将获得您已写入的预期和正确大小,即使您的操作系统使用了写入缓存.这些进程是由操作系统为您抽象出来的,所以不用担心。

但是正如您在评论中提到的网络驱动器:但是,网络驱动器通常不是这种情况。因为操作系统不能简单地使用写缓存并异步完成写执行。 (网络可能会意外中断等)

【讨论】:

  • 回答问题。它是一个映射的网络驱动器。在这种情况下,我不必担心尺寸不正确? :)
  • 如果您的操作系统告诉您它已完成数据写入,并且没有产生任何错误,那么您可以预期它会这样做。
  • 偏执我只需要使用 FileInfo 并在控制从 File.WriteAllBytes 执行返回后获取文件大小。 :-F 至少 File.WriteAllBytes 是同步的(至少它在那里说 stackoverflow.com/a/16746598/1737819stackoverflow.com/a/15467185/1737819 )并且它会阻止执行一段时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多