我正在编写一个打印出Firefox cookies.sqlite
文件的程序。
int printfile(FILE* cookiesfile)
{
int c;
//fseek(cookiesfile,0x18260,SEEK_SET);
do{
c=fgetc(cookiesfile);
printf("%c",c);
}while(c != EOF);
printf("\n\n%x",c);
if (ferror(cookiesfile) != 0)printf("\nchareror!\n");
return 0;
}
代码在文件结束前的各个点返回EOF
。在十六进制编辑器或记事本中打开文件表明文件更大。 EOF
始终出现在同一点上。跳过这些点,数据将被读取,直到下一个EOF
。发现EOF
的字符通常是fgot之前没有任何问题(例如0x1a
,0x13
)。
检查ferror()
的结果没有帮助(因为没有错误)。
我不确定如何继续我的调试过程,有人能引导我朝着正确的方向前进吗?
答案 0 :(得分:2)
在不知道如何打开文件的情况下,我们不能肯定地说,但SQLite数据库文件不是文本文件。如果您在Windows计算机上以文本模式打开SQLite数据库文件,则每次尝试读取包含值26
(0x1A
,<的位置时,您将收到EOF kbd> Ctrl-Z )(并且没有理由假设这些位置将保持静止)。有许多用于处理SQLite数据库文件的免费(和商业)工具,其中至少是FireFox本身的SQLite Manager plugin。如果您仍想在C中执行此操作,我建议您转到the SQLite website,下载代码,并阅读介绍和文档。