如何强制刷新文件

2024-02-04

假设我有以下代码:

#include <chrono>
#include <fstream>
#include <thread>

int main()
{
  std::ofstream f("test.log");

  int i = 0;
  while (true)
  {
    f << i++;
    f.flush();

    std::this_thread::sleep_for(std::chrono::milliseconds(100));
  }
}

(请注意,我有一个flush每次写操作后调用)

我注意到该应用程序不会更新“test.log”文件的“上次修改时间”和“大小”属性,除非我右键单击该文件或打开它。

我猜想这是由于内部缓冲造成的(系统不希望对磁盘进行实际 I/O 等耗时的操作,除非被迫这样做)。我对吗?

我需要编写一个应用程序来监视其他应用程序创建的日志文件的更改(我无法更改它们)。起初,我想到FileSystemWatcher我注意到它具有相同的行为(除非文件在源应用程序中关闭,或者通过在 Windows 资源管理器中右键单击该文件而强制更新),否则它不会触发相应的事件。那我能做什么呢?调用 WinAPI 函数,例如GetFileAttributes对于我想要尽可能频繁查找的每个文件?


这里有两件事。一、文件MFT记录上的最后修改时间(相当于inode)is每次写信时都会更新。

然而返回的信息FindFirstFile和朋友不是来自文件,而是来自目录条目中缓存的信息。每当文件关闭时都会更新此缓存通过该目录条目打开的。这是大多数应用程序显示的信息,例如 Windows 资源管理器和命令提示符 DIR 命令。

如果你想知道文件何时更新,你需要执行相当于 Unix 的操作stat读取MFT记录(inode)的操作。这需要打开文件的句柄,调用GetFileInformationByHandle并再次关闭手柄。

第二件事是有充分的理由不这样做。如果程序正在写入文件,则它可能正在写入过程中。因此,该文件可能处于无效(损坏)状态。为了确保文件处于有效状态,您应该等到文件关闭。这就是您知道该文件现在可以查看的方式。

一旦写入程序完成对文件的写入,目录条目将被更新,并且 FileSystemWatcher 将显示该文件。

如果您绝对确定想要查看仍在写入过程中的文件的通知,那么您可以选择查看 USN 更改日志。我不知道这是否比目录条目更新,您必须对此进行调查。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何强制刷新文件 的相关文章

  • 确保 StreamReader 不会挂起等待数据

    下面的代码读取从 tcp 客户端流读取的所有内容 并且在下一次迭代中它将仅位于 Read 上 我假设正在等待数据 我如何确保它不会在没有任何内容可供读取时返回 我是否必须设置低超时 并在失败时响应异常 或者有更好的办法吗 TcpClient
  • 复制 std::function 的成本有多高?

    While std function是可移动的 但在某些情况下不可能或不方便 复制它会受到重大处罚吗 它是否可能取决于捕获变量的大小 如果它是使用 lambda 表达式创建的 它依赖于实现吗 std function通常被实现为值语义 小缓
  • 错误:表达式不产生值

    我尝试将以下 C 代码转换为 VB NET 但在编译代码时出现 表达式不产生值 错误 C Code return Fluently Configure Mappings m gt m FluentMappings AddFromAssemb
  • 为什么极端下派生类(多重虚拟继承)的大小包括超类成员大小的两倍?

    include
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 在 Visual Studio 2010 中从 Fortran 调用 C++ 函数

    我想从 Fortran 调用 C 函数 为此 我在 Visual Studio 2010 中创建了一个 FORTRAN 项目 之后 我将一个 Cpp 项目添加到该 FORTRAN 项目中 当我要构建程序时出现以下错误 Error 1 unr
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • DbContext 和 ObjectContext 有什么区别

    From MSDN 表示工作单元和存储库模式的组合 使您能够查询数据库并将更改分组在一起 然后将这些更改作为一个单元写回存储 DbContext在概念上类似于ObjectContext 我虽然DbContext只处理与数据库的连接以及针对数
  • 如何在 Xaml 文本中添加电子邮件链接?

    我在 Windows Phone 8 应用程序中有一些大文本 我希望其中有电子邮件链接 例如 mailto 功能 这是代码的一部分
  • Azure 辅助角色“请求输入之一超出范围”的内部异常。

    我在辅助角色中调用 CloudTableClient CreateTableIfNotExist 方法 但收到一个异常 其中包含 请求输入之一超出范围 的内部异常 我做了一些研究 发现这是由于将表命名为非法表名引起的 但是 我尝试为我的表命
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • 如果我使用客户端计算机上未安装的字体,会发生什么情况?

    有人可以告诉我 如果我在 WinForms 应用程序中使用目标计算机上不可用的字体 会发生什么情况 它是否使用同一系列的字体 只是 Sans Serif 还是其他字体 您的应用程序将回退到 Segoe UI Tahoma 然后是 MS Sa
  • 外键与独立关系 - Entity Framework 5 有改进吗?

    我读过了several http www ladislavmrnka com 2011 05 foreign key vs independent associations in ef 4 文章和问题 https stackoverflow
  • AES 128 CBC 蒙特卡罗测试

    我正在 AES 128 CBC 上执行 MCT 如中所述http csrc nist gov groups STM cavp documents aes AESAVS pdf http csrc nist gov groups STM ca
  • 如何在非控制台应用程序中查看 cout 输出?

    输出到调试窗口似乎相当繁琐 我在哪里可以找到cout如果我正在编写非控制台信息 则输出 Like double i a b cout lt lt b lt lt endl I want to check out whether b is z
  • 无法访问127.0.0.1

    我不知道这种情况何时开始发生 但结果是 127 0 0 1 无法在任何地方的任何端口上工作 例如 浏览器显示无法连接 以下是我的研究结果 localhost COMPUTER NAME 和实际 IP 地址都工作正常 我的主机文件中没有什么特
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • 我的班级应该订阅自己的公共活动吗?

    我正在使用 C 3 0 遵循标准事件模式我有 public event EventHandler
  • 如何从 ODBC 连接获取可用表的列表?

    在 Excel 中 我可以转到 数据 gt 导入外部数据 gt 导入数据 然后选择要使用的数据源 然后在提供登录信息后 它会给我一个表格列表 我想知道如何使用 C 以编程方式获取该列表 您正在查询什么类型的数据源 SQL 服务器 使用权 看
  • 从列表中选择项目以求和

    我有一个包含数值的项目列表 我需要使用这些项目求和 我需要你的帮助来构建这样的算法 下面是一个用 C 编写的示例 描述了我的问题 int sum 21 List

随机推荐

  • 当Java类是Serialized的实例时

    我想知道Java类何时是Serialized的实例 据我所知 只有实现了 Serialized 接口的类才是可序列化的 我正在尝试使用 junit 生成实体类 从某种模板 并检查它是否可序列化 我生成的类 不实现可序列化 如下所示 pack
  • IKImageBrowserView可以显示多行标题吗?

    我想要我的IKImageBrowserView通过将其换行并将其显示在多行中来显示长标题 但我一直无法实现这一点 我尝试更改返回的 titleFrame 的大小ImageBrowserCell子类 并在标题上设置段落样式 以便它应该换行 N
  • Qt - 在我的 MainWindow 上调用 setLayout() 时编译器抱怨

    我想学习如何在没有设计师的情况下手工创建 GUI 我尝试添加一个布局到我的MainWindow但运行时它说 QWidget setLayout 尝试在主窗口 上设置 QLayout 该窗口已经有布局 这是我的代码 Header class
  • Node.js:何时使用 Promises 与 Callbacks

    我正在更新一些较旧的 Node js 代码 在此过程中 我正在设计新模块来使用旧代码 我发现现在 与我第一次写这篇文章时相比 我更多地依赖于使用 ES6 承诺而不是回调 所以现在我有一些返回承诺的函数和一些回调函数的组合 这是乏味的 我认为
  • 如何阻止 Electron windows 共享 cookie?

    我正在电子应用程序中创建多个浏览器窗口 但我不希望它们共享 cookie 这就是我目前创建窗口的方式 function createWindow Create the browser window let mainWindow new Br
  • 如何检查设备是否有互联网连接:cocos-2d

    在我的一款 iPhone 应用程序中 我需要查明该设备是否有互联网连接 有人请帮忙吗 使用可达性类 if self checkInternetConnected NSLog Internet connected n BOOL checkIn
  • 有没有办法恢复MySql用户密码?

    我忘记了 MySQL 中一位用户的密码 有没有办法恢复MySQL用户密码 你不能recover但是你可以设置一个不同的 though 像这样 使用 skip grant tables 选项停止和启动 MySQL 进程 登录root用户 列出
  • 为什么我在 DatePickerDialog 中收到额外的标头?

    我得到了 DatePickerDialog 的额外标头 如下面的快照所示 我不想要这个 我在这里做错了什么 我需要没有该标头的 DatePickerDialog 请查看代码并让我知道代码的哪一部分去了错误的 非常感谢您的帮助 我的活动 pu
  • Numpy的matrix_power函数对大指数给出错误的结果[重复]

    这个问题在这里已经有答案了 我正在使用 Numpy 来实现斐波那契数列Q 矩阵法 http mathworld wolfram com FibonacciQ Matrix html 直到 n 47 为止结果都很好 此时 matrix pow
  • Jenkins 文本查找器插件,如何将此插件与 jenkinsfile 一起使用?

    我正在尝试使用编写 jenkinsfile文本查找器插件 https wiki jenkins io display JENKINS Text finder Plugin 但我不知道它到底是如何工作的 这是我的代码 pipeline age
  • 如何在 Subversion 中删除文件夹的 1 个修订版

    我的存储库中有几个项目 每个项目都有自己的文件夹 是否可以删除其中一个项目的最后修订版而不更改其他任何内容 示例 项目 A 的最新版本已提交创建 rev 50 其他项目的工作仍在继续 存储库现已更新 60 现在 A 的用户回来并请求删除上一
  • HTML:替换

    我一直认为更换
  • Rails Activeadmin - 自定义关联选择框

    在我的 Rails 应用程序中 我有以下模型 class Idea lt ActiveRecord Base belongs to user end class User lt ActiveRecord Base has many idea
  • 如何从 ASP.Net OpenID Connect OWIN 组件设置声明?

    我对使用新的 ASP Net OpenID Connect 框架同时在身份验证管道中添加新声明有疑问 如下面的代码所示 我不确定幕后到底发生了多少 魔法 我认为我的大部分问题都围绕着对 OWIN 身份验证中间件而不是 OpenID Conn
  • 运行 React 应用程序时找不到模块“@babel/plugin-transform-react-jsx-source”

    我刚刚创建了一个 React 应用程序create react app aquastars然后使用弹出依赖项yarn run eject当我运行该应用程序时 出现以下错误 找不到模块 babel plugin transform react
  • VS2010 LNK1181 重建带有依赖项的项目时

    我有一个包含两个 C CLR 项目的解决方案 一个项目引用另一个项目 因此项目依赖项和构建顺序正确反映了这一点 两个项目都针对相同的输出文件夹 依赖项目的依赖配置为Copy Local false 如果我自己 重建 依赖关系 它会构建得很好
  • servlet 引擎在调用 servlet 之前是否读取整个请求?

    Servlet 引擎 例如Tomcat or Jetty 接收 HTTP 请求并使用 servlet 调用HttpServletRequest对象 其中包含一个InputStream请求正文的 现在我想知道引擎是否已经读取整体来自网络的请求
  • (AWS) Athena:查询结果似乎太短

    我的 Athena 查询的结果似乎太短 试图找出为什么 Setup 胶水目录 尺寸为 118 6 G 数据 以 CSV 和 JSON 格式存储在 S3 中 Athena Query 当我查询整个表的数据时 每次查询只得到 40K 条结果 一
  • 在 Netbeans GUI Builder 中开发现有 GUI 代码

    我正在 Eclipse 中做项目 我做了 Swing 部分 但现在 我希望使用 Netbeans 来完成项目的 Swing 部分 因为它更容易完成 而且我能够更整洁地完成它 因为我对 swing 及其布局管理器没有太多经验 这是我在 sta
  • 如何强制刷新文件

    假设我有以下代码 include