考虑这个程序:
#include <stdio.h>
#include <windows.h>
int main(int argc, char** argv) {
if (argc != 2)
return 1;
HANDLE j = CreateFile("\\\\.\\F:", FILE_GENERIC_READ, FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM, NULL);
int k = SetFilePointer(j, atoi(argv[1]), NULL, FILE_BEGIN);
printf("%d\n", k);
}我得到了以下结果:
> a 512
512
> a 513
-1
> a 1024
1024所以我只能以卷扇区大小的倍数来移动文件指针。这是使用FILE_FLAG_NO_BUFFERING标志时应该出现的行为。然而,我没有使用这个标志,那么为什么我会得到这些结果呢?
发布于 2016-05-09 02:49:36
您打开了对驱动器卷而不是文件的直接访问。无论缓冲如何,卷的读/写必须是扇区大小的偶数倍。您不能读/写部分扇区。
发布于 2016-05-09 06:22:46
From the documentation for CreateFile:
卷包含一个或多个挂载的文件系统。即使在CreateFile中未指定非缓存选项,卷句柄也可以根据特定文件系统的需要以非缓存的方式打开。您应该假定所有Microsoft文件系统都将卷句柄作为非缓存打开。对文件的非缓存I/O的限制也适用于卷。
https://stackoverflow.com/questions/37103491
复制相似问题