【编程小记】在Windows下使用C/C++代码判断一个文件是否被其他进程占用

在Windows下使用C/C++代码判断文件是否被占用

  • 一、原理
  • 二、函数简单介绍
  • 三、实例代码

一、原理

Windows下有一个Windows API叫做CreateFile,通过这个接口我们可以创建或打开文件,我们打开文件时可以采用独占模式进行打开,如果能够打开文件说明这个文件没有被其他进程打开,如果打开失败说明该文件已经被其它进程打开了。

将该函数的第三个参数设置为0就是以独占模式进行打开文件

HANDLE CreateFile(
  [in]           LPCSTR                lpFileName,
  [in]           DWORD                 dwDesiredAccess,
  [in]           DWORD                 dwShareMode,
  [in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  [in]           DWORD                 dwCreationDisposition,
  [in]           DWORD                 dwFlagsAndAttributes,
  [in, optional] HANDLE                hTemplateFile
);

二、函数简单介绍

参数

参数名描述
lpFileName要创建或打开的文件的名称。
dwDesiredAccess以何种方式打开文件, GENERIC_READ 读,GENERIC_WRITE 写, GENERIC_READ | GENERIC_WRITE 读写
dwShareMode文件的共享模式,0表示以独占模式打开文件。
lpSecurityAttributes一个指针,与文件安全有关。一般情况下设置为NULL,表示此函数返回的句柄不能被子进程继承,并且返回的句柄关联的文件获得默认安全描述符。
dwCreationDisposition要对存在或不存在的文件执行的操作。一般设置为OPEN_EXISTING,表示只有存在文件才打开,文件不存在,则该函数将调用失败,记录错误。
dwFlagsAndAttributes一般情况下直接设置为FILE_ATTRIBUTE_NORMAL
hTemplateFile当创建文件时以什么为模板进行创建文件。一般不使用,我们设置为NULL

返回值

  • 如果函数成功,则返回值是指定文件的打开句柄。
  • 如果该函数失败,则返回值为INVALID_HANDLE_VALUE

三、实例代码

#include <iostream>
#include <Windows.h>

int main()
{
	// 注意路径前面有一个L
	HANDLE Handle =  CreateFile(L"hello.pptx", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
	if (INVALID_HANDLE_VALUE ==  Handle)
	{
		std::cout << "文件已经被其他进程占用!" << std::endl;
	}
	else
	{
		std::cout << "成功以独占模式打开文件!" << std::endl;
	}
	// 关闭句柄
	CloseHandle(Handle);
}

我们先打开hello.pptx文件,然后运行程序:

在这里插入图片描述

然后我们关闭hello.pptx文件,再次运行程序:

在这里插入图片描述


  • 这里是MSDN的官方文档:CreateFileA
  • 其中CreateFile是对CreateFileACreateFileW的别名,这样就可以根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSIUnicode 版本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/434134.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的舰船检测与识别系统(Python+PySide6界面+训练代码)

摘要&#xff1a;开发高级的舰船检测与识别系统对于提升海上安全监控和航运管理至关重要。本篇博客详细阐述了如何应用深度学习技术构建舰船检测与识别系统&#xff0c;并提供了完整的实施代码。本系统采用了性能强大的YOLOv8算法&#xff0c;并与YOLOv7、YOLOv6、YOLOv5进行了…

如何一键更新星露谷模组

小火星露谷管理器拥有一键更新模组的功能。 打开小火星露谷管理器的模组管理页面&#xff0c;点击一键更新模组。 页面会跳转到自动化模组管理引擎&#xff0c;稍等一会&#xff0c;他会自动生成更新流程模板。 流程模板生成完成后&#xff0c;会进入流程编排的界面&#xf…

【python--读取文件夹下所有文件读取关键词】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;Python &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; python练习题 抽取关键词 抽取关键词 import os import json import pandas as pd# 指定文件夹路径和关键…

使用Http请求下载文件带来的问题

java.io.IOException: Broken pipe 当使用http请求的方式将文件作为响应内容给浏览器&#xff0c;这个时候如果浏览器未开启自动下载(浏览器可能会终止这个tcp连接)&#xff0c;文件不会下载成功&#xff0c;但是这个时候请求已经到达服务器&#xff0c;如果这个时候&#xff0…

【python--读取csv文件统计店铺有关信息】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;Python &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; python练习题 读取csv文件统计店铺有关信息 读取csv文件统计店铺有关信息 import csv import osdef get_…

一个基于差异同步数据库结构的工具 - Skeema

本文是 GO 三方库推荐的第 5 篇&#xff0c;继续介绍数据库 schema 同步工具&#xff0c;我前面已经写了两篇这个主题的文章。系列查看&#xff1a;Golang 三方库。 今天&#xff0c;推荐是的一个基于差异实现数据库 schema 迁移的工具库 - skeema&#xff0c;同样由 Go 实现。…

HarmonyOS-卡片事件能力说明

卡片事件能力说明 ArkTS卡片中提供了postCardAction()接口用于卡片内部和提供方应用间的交互&#xff0c;当前支持router、message和call三种类型的事件&#xff0c;仅在卡片中可以调用。 接口定义&#xff1a;postCardAction(component: Object, action: Object): void 接口…

CleanMyMac X软件2024全面的测评,包括其功能、性能、易用性和安全性

作为软件评价专家&#xff0c;我对CleanMyMac X进行了全面的评估&#xff0c;包括其功能、性能、易用性和安全性等方面。以下是我的评价和建议&#xff1a; 首先&#xff0c;从功能方面来看&#xff0c;CleanMyMac X提供了丰富多样的清理和优化功能。它不仅能够智能扫描和清理…

网工内推 | 华为成都研究所,24届应届生人才储备计划

华为成都研究所 招聘岗位 网络工程师&#xff08;2024应届&#xff09; 岗位要求 24届的学员 本科公办院校 英语4/6级 有HCIP优先 工作地点 成都 私信小编&#xff0c;回复【内推】&#xff0c;获取内推名额申请资格~ 想获取更多『 思科 | 华为 | 红帽 认证真题 』、『 网…

RISC-V架构的不可屏蔽中断(NMI:Non-Maskable Interrupt)介绍

1、RISC-V特权架构官方文档描述 NMI是处理器核心的一种特殊输入信号&#xff0c;经常用于表示系统级别的紧急错误&#xff08;比如&#xff1a;外部硬件错误等&#xff09;。在遇到NMI后&#xff0c;处理器应该立即中止当前程序的执行&#xff0c;并处理NMI错误在RISC-V架构中&…

Python自动化测试利器selenium详解

Selenium是一种常用的Web自动化测试工具&#xff0c;支持多种编程语言和多种浏览器&#xff0c;可以模拟用户的交互行为&#xff0c;自动化地执行测试用例和生成测试报告。Selenium基于浏览器驱动实现&#xff0c;结合多种定位元素的方法&#xff0c;可以实现各种复杂的Web应用…

Android开发者值得深入思考的几个问题,看完必懂

程序员的劫 最近&#xff0c;又被程序员年龄的事情刷屏了。37岁被公司优化&#xff0c;找工作几个月都没有很好的归属&#xff0c;所谓的小公司还看不上。等等类似的话题变成了程序员的吐槽固定标题&#xff0c;无论是程序员&#xff0c;还是其他行业人员&#xff0c;都可以就…

HTML入门

1. HTML基础 1.1 什么是HTML HTML是超文本标记语言。 超文本&#xff1a;比文本更强大&#xff0c;可以包含图片&#xff0c;链接等。 标记语言&#xff1a;由标签构成的语言。所以我们学习HTML就是在学习标签。 1.2 认识HTML标签 HTML代码都是由标签组成的&#xff0c;例…

2024希亦、追觅、石头、添可洗地机哪款最好用?一文教会你快速挑选洗地机

对许多人来说&#xff0c;全屋清洁可能是件让人望而却步的任务&#xff0c;因为它需要花费大量的体力和时间。但是&#xff0c;随着科技的发展&#xff0c;我们可以找到一些能够简化这个过程的神器&#xff0c;比如洗地机。有了洗地机&#xff0c;我们可以轻松地完成扫地、拖地…

Linux学习-函数指针和指针函数

目录 字符串是char *型&#xff0c;代表的是字符串的第一个元素的地址 指针函数&#xff1a; 函数指针&#xff1a; 字符串是char *型&#xff0c;代表的是字符串的第一个元素的地址 指针函数&#xff1a; int *Fun(int a, int b); 是函数&#xff0c;函数的返回值类型是…

FlyClient SPV client轻量化

这篇文章主要是为了构建一种轻客户端的算法。 如果使用SPV 的方式验证交易&#xff0c;每个client上面需要存储非常多的header。使用 proofs of proof-of-work 的方式&#xff0c;使得请客户端仅仅下载少量的区块头就能验证这一条链的安全性&#xff0c;然后再对包含交易的区块…

【刷题】双指针入门

双指针入门 双指针283.移动零1089. 复写零202. 快乐数11. 盛最多水的容器Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读&#xff01;&#xff01;&#xff01;下一篇文章见&#xff01;&#xff01;&#xff01; 双指针 双指针是非常经典的算法&#xff0c;包括但…

【python】对角线遍历

python系列文章目录 【python】基于cv2提取图片上的文本内容 【python】简单作图 【python】数组字符串等实用 【python】sort与sorted排序使用 【python】对角线遍历 python系列文章目录说明1.分析2.注意事项2.1 遍历2.2 区间2.3 顺序 3.代码实现 说明 给你一个大小为 m x n…

kerberos学习系列一:原理

1、简介 Kerberos 一词来源于古希腊神话中的 Cerberus —— 守护地狱之门的三头犬。 Kerberos 是一种基于加密 Ticket 的身份认证协议。Kerberos 主要由三个部分组成&#xff1a;Key Distribution Center (即KDC)、Client 和 Service。 优势&#xff1a; 密码无需进行网络传…

网站建设:承诺网站打开速度,这个要求合理吗?

很多甲方都要求网站的打开速度&#xff0c;这个要求合理吗&#xff1f;其实说合理也合理&#xff0c;说不合理也不合理。 承诺打开速度的合理性的一面 要求网站打开速度是一个合理的要求。网站的打开速度对于用户体验和网站的成功至关重要。以下是一些原因说明为什么网站打开速…