2

我正在编写一个打印出 Firefoxcookies.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通常在以前没有任何问题的情况下被删除(即0x1a0x13)。

检查结果ferror()无济于事(因为不存在错误)。

我不确定如何在调试过程中进行,有人可以引导我走向正确的方向吗?

4

1 回答 1

2

在不知道您如何打开文件的情况下,我们无法确定,但 SQLite 数据库文件不是文本文件。如果您在 Windows 机器上以文本模式打开 SQLite 数据库文件,每次您尝试在包含26( 0x1A, Ctrl-Z)值的位置读取时都会收到 EOF (并且没有理由假设这些位置将保持静止)。有许多免费(和商业)工具可用于处理 SQLite 数据库文件,其中最重要的是 FireFox 本身的SQLite Manager 插件。如果你还想用 C 语言做,我建议你去SQLite 网站,下载代码,阅读介绍和文档。

于 2013-08-16T16:58:46.097 回答