我在使用GetFileTime和SetFileTime时遇到问题
当涉及到目录时。具体来说,我认为我的问题是
我是WinAPI的新手,我认为我没有
正确处理。

有两种情况。

首先,我只需要一个句柄即可获取文件或目录
时间戳(创建,访问,修改)。我想以安全灵活的方式制作此 handle 。
不想在参数上过大。

在第二个中,我需要一个可让我修改文件或目录的句柄
时间戳记。我还想以最小的权限创建此句柄,但以灵活和可靠的方式。

灵活的意思是,在这两种情况下,我都需要代码才能在本地,网络共享和多线程应用程序中工作。多线程部分不是必需的,因为我的应用程序不会在文件/目录上创建多个句柄,但是其他一些在后台运行的应用程序也可能会这样做。

//QUESTION 1:
//I do this when I just need a handle to **GET** some attributes like dates.
//(here I just need a handle to get info I am not modding the item).
//Am I using the correct params if I need it to work in a
//local + networked environment and also in a multi-threaded app???
h1 = CreateFile(itemA, GENERIC_READ, FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
if (h1 == INVALID_HANDLE_VALUE){

    return 0;
}
//QUESTION 2:
//The above works for local files but not local dirs.
//How can I get the above to work for dirs? (Same environment considerations).


//QUESTION 3:
//I do this when I just need a handle to ***SET*** some attributes (like timestamps).
//(here I need a handle that allows me to modd the items timestamp).
//Am I using the correct params if I need it to work in a
//local + networked environment and also in a multi-threaded app???
hItemB = CreateFile(itemB, FILE_WRITE_ATTRIBUTES, FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
if (hItemB == INVALID_HANDLE_VALUE){
    return 0;
}
//QUESTION 4:
//The above works for local files but not local dirs.
//How can I get the above to work for dirs? (Same environment considerations).

最佳答案

答案2:要使用CreateFile获取目录的句柄,您需要使用FILE_FLAG_BACKUP_SEMANTICS标志。使用您的示例:

h1 = CreateFile(itemA, GENERIC_READ, FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);

我想这也将对答案4起作用,但是我还没有尝试确认。

关于c++ - CreateFile GetFileTIme SetFileTime,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4998814/

10-12 21:32