gpt4 book ai didi

c - 从 ReadFile 中检测错误数据

转载 作者:行者123 更新时间:2023-11-30 18:57:08 26 4
gpt4 key购买 nike

我有一个函数应该读取包含定义为的结构数组的 .dat 文件:

struct data{
char name[30];
double age;
}

struct data buffer[80];

文件中不允许包含其他数据。

我想保护用户不读取不包含上述结构的文件。如果我尝试读取一些随机的 .docx 文件或其他文件,那么出现错误的可能性非常高。

如何确保用户无法读取他或她不应该读取的文件?有没有办法找出文件中的数据是结构还是其他东西?

我正在使用 ReadFile 函数并将数据保存到缓冲区中。

仅仅确保它是一个 .dat 文件是不够的,因为这样的文件可能包含任何内容。

最佳答案

您可以在文件开头写入特殊签名(无论您选择什么),就像许多文件格式一样。例如,所有 .ZIP 文件都包含

50 4B 05 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

(即“PK”,后跟“0x05”、“0x06”和 18 个 NULL 字节)。

您只需首先从文件中读取等于文件签名大小的字节数,然后将其与您的签名进行比较。如果它们匹配,则从签名长度之后的第一个字节开始读取到文件末尾。

如果您的文件始终包含 80 个数据结构,则可以通过读取文件大小、减去用于签名的字节数并将余数除以 80 个数据结构的大小来添加额外的验证。如果签名和字节大小都匹配,则它可能是您的文件。

编辑后(这表明您无法修改数据文件的结构),第二个选项实际上是唯一可行的选项。只需删除与跳过签名大小字节相关的部分即可;读取文件的大小(以字节为单位)并将其除以 sizeof(data),它应该等于 80。这不是一个完美的解决方案,但无法修改布局以添加更具体的内容可能是你能做到的最好的了。

关于c - 从 ReadFile 中检测错误数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22082543/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com