SetFilePointer没有FILE_FLAG_NO_BUFFERING

考虑这个程序:

#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标志所预期的行为。 但是我不使用那个标志,为什么我会得到这些结果呢?

Solutions Collecting From Web of "SetFilePointer没有FILE_FLAG_NO_BUFFERING"

您可以直接访问驱动器卷而不是文件。 无论缓冲区如何,卷的读取/写入都必须是扇区大小的倍数。 您无法读取/写入部分扇区。

从CreateFile的文档:

卷包含一个或多个安装的文件系统。 即使未在CreateFile中指定非缓存选项,卷处理也可以根据特定文件系统的意愿打开为非缓存。 您应该假定所有Microsoft文件系统都将卷处理为非缓存。 对文件的非缓存I / O的限制也适用于卷。