我尝试向后移动文件中的位置,并且仅当我移动512字节时它才起作用,为什么?
_file = CreateFile(path,
GENERIC_WRITE | GENERIC_READ, 0, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_NO_BUFFERING
, NULL);
// THIS one works
LARGE_INTEGER distToMove = {-512};
if(SetFilePointerEx(_file, distToMove, NULL, FILE_CURRENT) == FALSE)
{
// I got #87 error with GetLastError()
}
// This one does NOT work
LARGE_INTEGER distToMove = {-3};
if(SetFilePointerEx(_file, distToMove, NULL, FILE_CURRENT) == FALSE)
{
// I got #87 error with GetLastError()
}
最佳答案
在此处查看文档:http://msdn.microsoft.com/en-us/library/windows/desktop/cc644950%28v=vs.85%29.aspx
基本上,如果以无缓冲模式打开文件,则必须仅在磁盘扇区中移动(在Windows API文档中称为卷扇区大小)。但请注意,具有4Kn的现代磁盘驱动器的扇区为4096字节,因此您确实需要首先检查扇区大小(或简单地删除NO_BUFFERING标志。)
关于c++ - 为什么我只能将文件中的位置指示器(SetFilePointerEx)乘以512乘数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25224556/