c++ - 为什么我只能将文件中的位置指示器 (SetFilePointerEx) 移动 512 乘数?

标签 c++ c winapi

我尝试向后移动文件中的位置,但仅当我移动 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 标志。)

关于c++ - 为什么我只能将文件中的位置指示器 (SetFilePointerEx) 移动 512 乘数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25224556/

相关文章:

C++ - 通过指针表示所有权

c++ - '类' : illegal use of this type as an expression how do I fix it?

javascript - 为什么 Node.JS 中的 V8 比我的原生 C++ 插件更快?

c++ - 寻找搬迁的起源

检查相等指针和内存汇总

c++ - LuaBridge 回调(将 lua 函数传递给 c++)

c - 指向二维数组的指针作为c函数中的参数

c - C中的延迟()问题

c++ - 如何从资源中恢复文本控件?

winapi - SHBrowseForFolder,但使用文本框进行导航