我尝试写一个缓冲区,这样我就可以在文件中删除很多空的“00”字符。角色没用,完全是随机的。他们正在对该计划中的搜索者造成严重破坏。下面的代码编译,但只是在文件传递给它时似乎挂起。任何建议都会有所帮助。
void ReadFile(char *name)
{
FILE *dbg;
char *buffer;
unsigned long fileLen;
//Open file
dbg = fopen(dbg, "w+");
if (!dbg)
{
fprintf(stderr, "Unable to open file %s", name);
return;
}
//Get file length
fseek(dbg, 0, SEEK_END);
fileLen = ftell(dbg);
fseek(dbg, 0, SEEK_SET);
//Allocate memory
buffer = (char *)malloc(fileLen+1);
if (!buffer)
{
fprintf(stderr, "Memory error!");
fclose(dbg);
return;
}
//Read file contents into buffer
fread(buffer, fileLen, 1, dbg);
for(i = fileLen-1; i >= 0 && buffer[i] == 0; i--);
i++;
if (i > 0)
{
fwrite(buffer, 1, i, dbg);
}
fclose(dbg);
//Do what ever with buffer
free(buffer);
}
答案 0 :(得分:2)
更改
dbg = fopen(dbg, "w+");
到
dbg = fopen(name, "w+");
另外,如果您想要读取文件,更改它然后写入,则不应使用"w+"
打开它。您应首先使用"r"
打开文件,从中读取,根据需要进行任何更改,然后fclose
,然后再次打开它,但这次使用"w"
以便您对其进行书写。在"w"
rite模式下打开它后,您可以将修改后的缓冲区写回文件中。
答案 1 :(得分:2)
您打开了一个文件进行写作,然后尝试从中读取。
检查fread
和所有其他来电的返回值。