以下是使用的最小程序ReadDirectoryChangesW.我遇到的问题是只有第一次GetQueuedCompletionStatus回复.无论对目录进行了多少更改,第二次循环都会永久阻塞.
我也尝试使用同步版本,并有完全相同的问题.
#include <array>
#include <cassert>
#include <iostream>
#include <Windows.h>
int main() {
// Open the directory to monitor.
HANDLE dir = ::CreateFileA(
"G:\\Program Files (x86)\\Steam\\steamapps\\common\\eve online"
, FILE_LIST_DIRECTORY
, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE
, NULL
, OPEN_EXISTING
, FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED
, NULL
);
if (dir == INVALID_HANDLE_VALUE) {
std::cout << "Failed to open directory for change notifications!\n";
return 1;
}
// Setup IOCP.
HANDLE iocp = ::CreateIoCompletionPort(
dir
, NULL
, NULL
, …Run Code Online (Sandbox Code Playgroud) 给定一个/network/cifs不区分大小写的已安装的cifs文件系统,如何使用C获取区分大小写的路径?
例如,fs有一个文件/network/cfis/Adena/t.txt.鉴于/network/cfis/AdEnA/T.txt(正确解决),我想要/network/cfis/Adena/t.txt.
我知道一种方法是在路径上递归迭代,在所有小写中匹配它们,并获得目录迭代返回的实际情况.但是,这涉及很多我不愿意做的系统调用.
更改安装选项不是解决方案.
如果这不可能,是否可以确定路径是否在不区分大小写的文件系统上?这样我就可以避免执行递归目录迭代,除非需要.