如果一个文件被非独占的方式打开,在quicker里怎么判断?

使用问题 · 352 次浏览
tinghu 创建于 2023-07-18 00:48

如果一个文件被非独占的方式打开,在quicker里怎么判断?

搜到的子程序

https://getquicker.net/SubProgram?id=51be12ce-2c10-403c-a510-08d8e097b4c8

https://getquicker.net/SubProgram?id=4831a6c3-cd55-46d8-1b99-08d82a1761cb

好像都是在文件被独占时返回true.

 

tinghu 最后更新于 2023/7/18

回复内容
CL 2023-07-18 07:41
#1

没有这方面的经验。

估计需要更底层的编程才能实现。可以参考微软Process Monitor工具。

瞑空凌 2023-07-20 13:54
#2

不明白,问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]。当以非独占方式打开文件时,其他进程仍然可以以只读方式打开该文件。通过检查文件流对象的状态,可以确定文件是否成功打开。


```cpp

#include <fstream>


bool IsFileOpenedNonExclusively(const char* filename) {

    std::ifstream file(filename);

    if (file.is_open()) {

        // 文件以非独占方式打开

        file.close();

        return true;

    }

    return false;

}

```


这些方法可以用来判断文件是否以非独占方式打开。根据所提供的信息,这些方法可以帮助判断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

回复主贴