替换文件c中的字节

时间:2012-05-14 12:39:10

标签: c file-io

我有一些代码,我想改进它来查找和替换文件中的字节 所以 我想在FILE中找到所有原始数据,然后用newbytes替换它 然后保存文件,我知道如何打开,写入和保存,但很热我可以在char中找到字节?

 FILE* file;
 file = fopen("/Users/Awesome/Desktop/test", "r+b");
 int size = sizeof(file)+1;
 char bytes [size];
 fgets(bytes, size, file);
 for (int i=0; i<size; i++){ 
     char origbytes  []  = {0x00, 0x00};
     char newbytes   []  = {0x11, 0x11};
     if (strcmp(bytes[i], origbytes)) //Here the problem
     {
         fseek(file, i, SEEK_SET);
         fwrite(newbytes, sizeof(newbytes), 1, file);
     }
 }
 fclose(file);

4 个答案:

答案 0 :(得分:4)

strcmp()用于字符串比较而不是字符比较。可以直接比较两个字符

if ( bytes[i] == origbytes[something] )

此外,您不应在文件指针上应用sizeof()来确定文件大小。您应该使用fseek搜索文件末尾,然后查询ftell except for binary files。对于二进制文件,请使用fstat

之类的内容

还有一点需要注意的是,fgets如果看到换行符,则会在EOF之前返回很多。因此,在您的代码中,即使执行了我们建议的更改,您也可能无法读取整个文件内容。您需要使用fread appropriately

答案 1 :(得分:1)

字符串在C标准库中以空值终止。您的搜索数据实际上是一个零长度字符串。您想要memcmp

memcmp (&bytes [i], origBytes, 2)

答案 2 :(得分:1)

首先sizeof(file)+ 1只返回指针的大小+ 1.我认为你不需要这个文件的大小。使用此:How do you determine the size of a file in C? 然后,因为你比较字节(或多或少smae作为char)你只需比较使用=

答案 3 :(得分:0)

你可以使用fseek然后使用ftell函数来获取文件大小,而不是sizeof。