fseek在二进制文件中失败

时间:2012-12-05 19:06:05

标签: c file io fwrite fseek

编辑发现我的问题。我没有意识到fseek的origin参数的唯一允许值是SEEK_SET SEEK_CUR和SEEK_END,所以我把我的调用改为fseek(diskPointer,startOfData,SEEK_SET);

我有一个文件打开以便以二进制模式读写,所以我在文件上使用fseek,fread和fwrite。在我整个代码调用fwrite之前,我使用fseek将文件指针设置到正确的位置,但似乎fseek失败并返回非零值。 fseek失败的原因是什么?

这是我的功能,应该写'值'到文件。正在写入值,但是在文件的开头而不是我希望fseek让我去的位置。 ' startOfData'是一个常数,表示我试图写入的部门。

int writeToData(int position, char *value){
if(!fseek(diskPointer, 0, startOfData)){
    if (fwrite(value, sizeof(value), 1, diskPointer) != 1) {
    return 0;
    }
    return 1;
    }
return 0;
}

这是main(上面的writeToData函数由下面的createroot函数调用):

#define startOfData 405504
int main(int argc, char *argv[]){
char *filepath;
int clearDisk;
if (argc != 3) {
    printf("Usage: ./a.out [filepath of virtual disk] [0 to clear disk before use, any other number otherwise]\n");
}
else {
    filepath = argv[1];
    clearDisk = atoi(argv[2]);
}

//The virtual disk is opened for reading and writing
diskPointer = fopen(filepath, "r+b");

if (diskPointer != NULL) 
{
    if (clearDisk == 0) {
        initializeDisk();
        createRoot();
    }

}
else
{
    printf("Error preparing virtual disk; terminating program.\n");
    return(1);
}

我的初始化磁盘功能:

//5MB disk
void initializeDisk(){
int i;
char *buffer = "0";
for (i = 0; i < 5000000; i++) {
    fwrite(buffer, 1, 1, diskPointer);
}
rewind(diskPointer);
}

0 个答案:

没有答案