如果一个文件被非独占的方式打开,在quicker里怎么判断?
搜到的子程序
https://getquicker.net/SubProgram?id=51be12ce-2c10-403c-a510-08d8e097b4c8
和
https://getquicker.net/SubProgram?id=4831a6c3-cd55-46d8-1b99-08d82a1761cb
好像都是在文件被独占时返回true.
没有这方面的经验。
估计需要更底层的编程才能实现。可以参考微软Process Monitor工具。
不明白,问GPT是这样
ASK:
一个文件被非独占的方式打开怎么判断
FlowGPT:
要判断一个文件是否以非独占方式打开,可以使用以下方法:
1. 使用`CreateFile`函数判断文件是否以独占方式打开[1]。`CreateFile`函数是Windows API中用于创建或打开文件的函数。当以独占方式打开文件时,其他进程无法以任何方式打开该文件。如果`CreateFile`函数返回成功,并且指定了`dwShareMode`参数为0,表示以独占方式打开文件。因此,如果`CreateFile`函数返回成功但`dwShareMode`参数不为0,那么可以判断文件以非独占方式打开。
```cpp
#include <Windows.h>
bool IsFileOpenedNonExclusively(const char* filename) {
HANDLE hFile = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile != INVALID_HANDLE_VALUE) {
// 文件以非独占方式打开
CloseHandle(hFile);
return true;
}
return false;
```
2. 使用C++的文件流(如`ifstream`)打开文件,并检查文件流对象的状态来判断文件是否打开成功[3]。当以非独占方式打开文件时,其他进程仍然可以以只读方式打开该文件。通过检查文件流对象的状态,可以确定文件是否成功打开。
#include <fstream>
std::ifstream file(filename);
if (file.is_open()) {
file.close();
这些方法可以用来判断文件是否以非独占方式打开。根据所提供的信息,这些方法可以帮助判断TXT和JPG等类型的文件是否以非独占方式打开。
参考文献:
[1] 怎样判断以非独占方式打开的文件(如TXT和JPG文件)是否被打开? - CSDN论坛。链接:https://bbs.csdn.net/topics/70357295
[2] c++ 判断文件是否被打开 或者以独占方式打开_百度知道。链接:https://zhidao.baidu.com/question/224066901.html
[3] 打开被独占的文件方法(一) -- 寻找打开文件的句柄 - CSDN博客。链接:https://blog.csdn.net/angelxf/article/details/7517628
[4] 如果一个文件被非独占的方式打开,在quicker里怎么判断? - Quicker。链接:https://getquicker.net/QA/Question/19401
[5] 以非独占的方式打开文件_怎么打开文件不是独占_Tiger_shl - CSDN博客。链接:https://blog.csdn.net/Tiger_shl/article/details/84939616