为什么我可以移动位置指示灯(SetFilePointerEx)在文件只有512倍
Why I can move the position indicator (SetFilePointerEx) in file ONLY by 512 multiplier?
我尝试向后移动文件中的位置,只有当我移动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标志)
相关文章:
- .cpp和.h文件中的模板专用化声明
- 如何使用 fprintf 将连续的 512 字节保存到文件中
- 将 CSV 文件中的双倍值C++到矢量中
- 在 Linux 上,目标文件比在 macOS 或 Windows 上大 2.5 倍
- 将文本文件的内容写入C 中的文件块(512个字节)的数组
- C++,从 txt 读取到矢量的双倍,读取整个文件时出现问题
- MF SinkWriter mp4文件的播放持续时间是添加音频样本时的一半,图像的播放速度也是添加音频样本的两倍
- 适用于大文件和 512 KB 块的最快和轻量级哈希算法 [C,Linux,MAC,Windows]
- 打开'write'文件所需的时间是打开文件'read'的 10-50 倍
- c++ 从文件中读取双倍,但如果程序遇到字符串,则记录
- 对于相同的C 源文件,其GCC可执行文件在Windows中比Linux大的655倍.为什么这么大的差异
- 从C++中的.csv文件中读取双倍数据
- C++:在 ofstream 文件中写一个双倍近似,比如 printf("%f....)
- C++ 读取文件并将整数存储在向量中.最终占用的驻留内存大约是实际文件大小的 5 倍
- 从文件中读取双倍
- CPP快速读取双倍的小二进制文件
- 为什么使用VS 2012构建的MFC对话框的可执行文件大小几乎是使用VS 2005构建的对话框的3倍
- Python套接字,下载几乎是原始文件大小的10倍,上传是0字节
- 为什么我可以移动位置指示灯(SetFilePointerEx)在文件只有512倍
- 将文件读入结构体时大小增加10倍