为什么我可以移动位置指示灯(SetFilePointerEx)在文件只有512倍

Why I can move the position indicator (SetFilePointerEx) in file ONLY by 512 multiplier?

本文关键字:文件 512倍 SetFilePointerEx 移动 我可以 位置 指示灯 为什么      更新时间:2023-10-16

我尝试向后移动文件中的位置,只有当我移动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文档中称为卷扇区大小)。在你的例子中,这些恰好是512;但是要注意,具有4Kn的现代磁盘驱动器具有4096字节的扇区,因此您确实需要首先检查扇区大小(或者简单地删除NO_BUFFERING标志)