从文件中删除头文件 我希望能够编辑C++中的二进制文件的内容,并把所有内容都删除到某个字符位置,我已经知道,有点像从文件中删除头。

从文件中删除头文件 我希望能够编辑C++中的二进制文件的内容,并把所有内容都删除到某个字符位置,我已经知道,有点像从文件中删除头。,c++,winapi,C++,Winapi,我的一个示例文件包含130万字节,我想删除前一个38400字节,然后以原始名称保存该文件 目前,我一直在进行缓冲读取,以找到每个文件的位置(剪切文件的规则很复杂,这不是一个简单的搜索),当然,我可以从pos进行另一次缓冲读取,输出到一个新文件,然后进行重命名,或者类似的操作 但是要复制整个文件感觉很麻烦。有没有办法让操作系统(仅限Windows Vista及以上版本-不需要跨平台)重新定位文件的开头,并回收那些38400字节?唉,我找不到办法,所以我要请你帮忙:) 非常感谢您提供的帮助。您需要的

我的一个示例文件包含130万字节,我想删除前一个38400字节,然后以原始名称保存该文件

目前,我一直在进行缓冲读取,以找到每个文件的位置(剪切文件的规则很复杂,这不是一个简单的搜索),当然,我可以从pos进行另一次缓冲读取,输出到一个新文件,然后进行重命名,或者类似的操作

但是要复制整个文件感觉很麻烦。有没有办法让操作系统(仅限Windows Vista及以上版本-不需要跨平台)重新定位文件的开头,并回收那些38400字节?唉,我找不到办法,所以我要请你帮忙:)


非常感谢您提供的帮助。

您需要的是我所说的“lop”操作,它有点像截断,但位于文件的前面。我前一段时间发了邮件。不幸的是,没有这样的东西可用。

您要查找的是我所说的“lop”操作,它有点像截断,但位于文件的前面。我前一段时间发了邮件。不幸的是,没有这样的东西可用。

不,在我熟悉的任何操作系统(包括任何版本的Windows)中,都不支持删除文件头。您必须实际移动要保留的字节,以便它们在开始时结束。您可以通过一些努力在适当的位置执行此操作,但最简单的方法是按照您的建议编写一个新文件,然后重命名并删除dance。

不,在我熟悉的任何操作系统(包括任何版本的Windows)中都不支持删除文件头。您必须实际移动要保留的字节,以便它们在开始时结束。您可以通过一些努力在适当的位置执行此操作,但最简单的方法是如您所建议的那样—编写一个新文件,然后重命名并删除舞蹈。

只需将文件(通过固定内存块)从必要的位置覆盖到文件的开头

const size_t cBufSize = 10000000; // Adjust as you wish
const UINT_PTR ofs = 38400;
UINT_PTR readPos = ofs;
UINT_PTR writePos = 0;
UINT_PTR readedBytes = 0;
1. BYTE *buf = // Allocate cBufSize memory buffer
2. Seek to readPos
3. Read cBufSize bytes to buf, remember actual readed number of bytes to readedBytes 
4. Seek to writePos
5. Write readedBytes from buf
6. Increase readPos and writePos on readedBytes value
7. Repeat from step 2, until you get end of file.
8. Reduce file size on ofs bytes.
只需覆盖文件(通过固定内存块)从必要位置到文件开头

const size_t cBufSize = 10000000; // Adjust as you wish
const UINT_PTR ofs = 38400;
UINT_PTR readPos = ofs;
UINT_PTR writePos = 0;
UINT_PTR readedBytes = 0;
1. BYTE *buf = // Allocate cBufSize memory buffer
2. Seek to readPos
3. Read cBufSize bytes to buf, remember actual readed number of bytes to readedBytes 
4. Seek to writePos
5. Write readedBytes from buf
6. Increase readPos and writePos on readedBytes value
7. Repeat from step 2, until you get end of file.
8. Reduce file size on ofs bytes.

复制整个文件需要的时间太长了吗?没有比我预期的时间长,但是有些文件超过2GB,所以也不是很小。无论如何,非常感谢你们的帮助。非常感谢:)我刚刚找到了一些关于为什么没有实现的进一步解释:上面文章的新链接:复制整个文件是否需要太长时间?它不会比我预期的时间长,但是一些文件超过2GB,因此也不是很小。无论如何,非常感谢你们的帮助。非常感谢:)我刚刚找到了一些关于为什么它没有实现的进一步解释:上面文章的新链接:所以你给了一个甚至不存在的东西命名?:)@弗拉德拉扎连科:我们经常这样做:在创建之前先命名。当我去寻找它的时候,我使用了各种各样的搜索词。非常感谢你的链接。这是一本有趣的读物。所以你给一些根本不存在的东西起了个名字?:)@弗拉德拉扎连科:我们经常这样做:在创建之前先命名。当我去寻找它的时候,我使用了各种各样的搜索词。非常感谢你的链接。这是一本有趣的书。