等待文件可供 Win32 读取

2024-02-07

我正在通过调用查看目录ReadDirectoryChangesW同步地。当新文件可用时,我尝试立即访问它CreateFile with GENERIC_READ and FILE_SHARE_READ,但这给了我ERROR_SHARING_VIOLATION。当我尝试读取文件时,将文件放入监视目录的进程尚未完成写入。

有什么方法可以可靠地等待文件可供读取吗?我可以将该方法放入如下循环中,但我希望有更好的方法。

while ((hFile = CreateFile (path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE)
{
    if (GetLastError() == ERROR_SHARING_VIOLATION)
        Sleep (500);
    else
        break; // some other error occurred
}

if (hFile == INVALID_HANDLE_VALUE)
{
    // deal with other error
    return 0;
}

ReadFile (...);

我认为没有针对您正在寻找的事件类型的通知,但作为一种改进,我建议逐步延迟。这样,您将获得对拖/放等操作的快速响应时间,并且如果用户在 Excel 中打开文件一个小时,也不会因紧密循环而占用 CPU。

int delay= 10;
while ((hFile = CreateFile (path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE)
{
    if (GetLastError() == ERROR_SHARING_VIOLATION) {
        Sleep (delay);
        if (delay<5120) // max delay approx 5.Sec
            delay*= 2;
    }
    else
        break; // some other error occurred
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

等待文件可供 Win32 读取 的相关文章

  • ASP.NET 会员电子邮件验证

    尝试基于 C 创建电子邮件验证本文 https web archive org web 20211020153319 https www 4guysfromrolla com articles 062508 1 aspx 我创建了一个 ja
  • C/C++ 程序是在 CPU 上运行还是在内核上运行?

    我已经编程很多年了 但有一件事我一直不明白 有两种类型的编程语言 编译型语言和解释型语言 编译型语言首先需要编译成解释型语言 然后才能执行 例如 C C 需要先编译为机器语言 然后才能执行 我的问题来了 谁真正运行已编译的 C C Wind
  • 是否可以通过引用以基类作为参数的函数来传递派生类

    假设我们有一个抽象基类IBase使用纯虚方法 接口 然后我们推导出CFoo CFoo2来自基类 我们有一个知道如何使用 IBase 的函数 Foo IBase input 这些情况下通常的场景是这样的 IBase ptr static ca
  • Windows CE 6.0 和运行时链接到调试 DLL /MDd

    我在 x86 PC 上使用 Windows CE 6 0 R3 我已经为该平台构建了 NK bin 和 SDK 但我有一些问题需要了解如何使用 MTd 调试 DLL 构建控制台应用程序 如果我尝试构建这个 main c with MDd i
  • 有没有办法让我的程序用更少的代码运行?

    我为学校作业编写了以下代码 它编译并打印所有正确的消息 但出于我自己的好奇心 我想知道我的代码是否可以缩短并且仍然有效 我尝试了 signal 而不是 sigaction 但我听说 sigaction 比 signal 更受青睐 此外 此任
  • 是否返回 std::move (x)?

    Are std vector
  • 如何(可移植地)在 C 和 C++ 中获取 DBL_EPSILON

    我正在 Linux AS 3 上使用 GCC 3 4 并试图找出DBL EPSILON 或者至少是一个不错的近似值 我怎样才能以编程方式获取它 在 C 中是std numeric limits
  • 使用 Process.Start() 打开文件夹时访问被拒绝异常

    我有一个 C 中的 winforms 应用程序 我必须在其中打开某个文件夹 我用 System Diagnostics Process Start pathToFolder 这会导致以下异常 System ComponentModel Wi
  • C++ Linux GCC 应用程序中的 GUID

    我有很多服务器运行这个 Linux 应用程序 我希望他们能够生成一个碰撞概率较低的 GUID 我确信我可以从 dev urandom 中提取 128 个字节 这可能没问题 但是有没有一种简单易用的方法来生成与 Win32 更等效的 GUID
  • 如何实现可变虚拟成员函数

    所以我有这个功能 virtual void CallRemoteFunction const char pServerGameObjectId const char pFunctionName OVariant arg1 OVariant
  • DataContractJsonSerializer 包含元素类型子类型的通用列表

    我要使用DataContractJsonSerializer用于 JSON 序列化 反序列化 我在 JSON 数组中有两种对象类型 并希望将它们都反序列化为相应的对象类型 具有以下类定义 DataContract public class
  • C++ 中类型信息何时向后流动?

    我刚刚看了 Stephan T Lavavej 的演讲CppCon 2018关于 类模板参数推导 在哪里某个点 https youtu be H ut6j1BYU t 941他顺便说 在 C 中 类型信息几乎永远不会向后流动 我不得不说 几
  • 如何在Phone类库项目中添加ResourceDictionary并访问它

    我正在开发一个项目 其中我有一个引用图书馆项目的子项目 在我的库项目 电话类库 中 如何创建 ResourceDictionary xaml 其中我需要添加一些样式并在 xaml 文件和 cs 文件中使用它 我需要访问 xaml 文件中的
  • 为什么 C++20 范围不只提供管道语法?

    我知道这个问题听起来很奇怪 所以这里有一些背景信息 最近 我很失望地了解到 C 20 范围内的映射缩减并不像人们所期望的那样工作 即 const double val data transform accumulate 不起作用 你必须这样
  • 为什么我从 c# 到 js 得到不同的 MD5 哈希值?

    我有一个用于加密密码的 C 函数 System Security Cryptography MD5CryptoServiceProvider md5Provider new System Security Cryptography MD5C
  • 函数中的重复参数检查

    我经常有调用层次结构 因为所有方法都需要相同的参数 如果我不想将它们放在实例级别 类的成员 那么我总是问我在每个方法中检查它们的有效性是否有意义 例如 public void MethodA object o if null o throw
  • 不兼容的指针到字符转换

    我正在编写一个程序 将卡片值写入 52 个点字符的多维数组中 该程序是一个测试数组 稍后我将其作为函数写入主程序中 在程序中 我通过以下方式初始化 for 循环计数0通过51 我用一个switch语句调制13将卡牌值分配给数组点 但是 我收
  • 使用 QTestLib 时抑制 qDebug

    我正在向 Qt 中的项目添加单元测试 并希望使用 QTestLib 我已经设置了测试并且它们运行良好 问题是在项目中我们重写了 qDebug 以输出到我们自己的日志文件 这在运行应用程序时效果很好 问题是当我测试类时 它有时会开始记录 然后
  • 频繁插入已排序的集合

    我已经对集合 列表 进行了排序 并且我需要始终保持其排序 我目前在我的集合上使用 List BinarySearch 然后在正确的位置插入元素 我也尝试过在每次插入后对列表进行排序 但性能不可接受 有没有一种解决方案可以提供更好的性能 也许
  • File.Move 的原子性

    我想将目录中的文件重命名为原子事务 该文件不会更改目录 该路径作为 NTFS 文件系统的 UNC 路径提供 可能位于服务器 03 或 08 上 File Move 对于这些目的来说是原子的吗 例如 它要么成功完成 要么失败 以使原始文件仍然

随机推荐

  • ASP.NET 连接已重置

    我有一些代码从 SQL DB 中提取数据 然后循环遍历记录以生成字符串 该字符串最终将写入文本文件 该代码在我的本地 VS 上运行良好 但在实时服务器上 大约一分半钟后 我收到 未收到数据 错误 chrome 该代码在循环数据表的过程中停止
  • 将页面加载设置为黑色而不是白色背景?

    网站链接 http www ideagang co home php http www ideagang co home php 从一页点击到另一页时是否可以将背景设置为黑色 现在 网站以黑色背景完美加载 只是当我从一个页面导航到另一个页面
  • 如何从 Vista/7 可执行文件中提取完整图标?

    如果我有一个 Vista ico 文件 其中包含 16x16 32x32 256x256 等版本的图标 我只需执行以下操作即可成功将其加载为 NET 图标 Icon myIcon new Icon C MyIcon ico 然后我可以访问图
  • Rails 回调未执行

    在我的一生中 我试图找出为什么我的回调没有被执行sometimes 你没听错有时因为大多数时候它都是开箱即用的 我所拥有的只是两个模型之间的父 子关系 创建子记录后我所做的一切after create回调是更新 累积父字段中的所有子金额以避
  • 通信链路故障,Spring Boot + MySql +Docker + Hibernate

    我正在使用 Spring Boot Hibernate 和 MySql 运行应用程序时 它运行良好 符合预期 但是 在制作 docker compose 文件并使用 mysql docker 映像运行应用程序 docker 映像时 它会出现
  • 如何使用空手道实现基本身份验证?

    我在Karate Demo中看到了有关Oauth 2的详细信息 您还能提供如何实现Basic Auth吗 https i stack imgur com 3DWyF png 是的 这个 JS 函数就是你所需要的 basic auth js
  • 如何用C#获取html页面源码

    我想将完整的网页 asp 保存在本地驱动器中 htm from url https www digikala com Search Category Motherboard Category Electronic Devices Categ
  • 指定泛型集合中重写方法的类型提示

    我定义了一个抽象基类BaseRepository充当具有指定超类型的项目的集合Foo 中的便利类方法BaseRepository被注释 类型暗示可以与类型的对象一起使用Foo 这是一个最小的例子 from abc import ABCMet
  • 将多个txt文件加载到单个数据框中并将名称保留为R中的列

    我是 R 新手 我正在尝试将 100 个左右的 txt 文件 包含名称 频率和性别三列 加载到单个数据框中 这些文件的名称均为 yob1990 txt 等 我可以将所有文件放入 R 中 但我不知道如何添加仅包含年份的列 有人可以帮忙吗 我会
  • 从 PHP 命名空间内定义全局函数

    Is it possible从 PHP 命名空间内 在具有名称空间 http php net manual en language namespaces definition php宣言 如果是这样 怎么办
  • connectionDidFinishLoading - 如何强制更新 UIView?

    我可以从互联网下载 ZIP 文件 后处理在connectionDidFinishLoading 中完成 并且工作正常 但没有更新UIView 元素 例如 我设置 statusUpdate text Uncompressing file 但该
  • 意图 putExtra ArrayList

    有谁知道如何添加ArrayList
  • Swift:具有多种模式的开关大小写无法绑定到变量

    在官方斯威夫特编程语言 https developer apple com library ios documentation Swift Conceptual Swift Programming Language Statements h
  • 如何将不明确的字符串解析为日期?

    我试图找出一种将字符串解析为日期对象的 简单 方法 该字符串可以是 yyyyMMdd yyyyMMddHHmm 或 yyyyMMddHHmmSS 目前 我正在查看字符串的长度 并根据长度创建一个 DateParser 有没有更优雅的方法来做
  • 使用 SciPy 绘制分位数-分位数图

    如何使用 Python 创建 qq plot 假设您有大量测量值并且正在使用某种以 XY 值作为输入的绘图函数 该函数应根据某些分布 正态分布 均匀分布 的相应分位数绘制测量值的分位数 由此产生的图让我们可以评估我们的测量是否遵循假设的分布
  • 有什么理由使用同步 XMLHttpRequest 吗?

    似乎大多数人都使用 XMLHttpRequest 执行异步请求 但显然 能够执行同步请求的事实表明可能有这样做的正当理由 那么这个合理的理由可能是什么 同步 XHR 对于保存用户数据很有用 如果您处理beforeunload您可以在用户关闭
  • 文本框不可点击但可编辑

    我有一个带有 10 个文本框的小表单 我将它们设置为当前正确的 Tab 顺序 就像我希望它们按 Tab 到的方式一样 我想知道是否有一种方法可以设置文本框 以便它们不能被选择进行编辑 除非它们被选项卡插入 即 我不希望最终用户能够单击文本框
  • 如何在Oracle中定义ON COMMIT触发器?

    oracle数据库中是否有任何方法可以定义触发器 当指定的表发生更改时 该触发器将在提交之前同步触发 如果抛出异常则回滚 Oracle中没有ON COMMIT触发机制 不过 还有一些解决方法 您可以使用带有 ON COMMIT REFRES
  • 您最喜欢的 Windbg 提示/技巧是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 等待文件可供 Win32 读取

    我正在通过调用查看目录ReadDirectoryChangesW同步地 当新文件可用时 我尝试立即访问它CreateFile with GENERIC READ and FILE SHARE READ 但这给了我ERROR SHARING