2011-10-13 93 views
0

这里是我的代码截至目前:读取和写入二进制文件的缓冲区

#include <stdio.h> 
#include "readwrite.h" 

int main() 
{ FILE* pFile; 
    char buffer[] = {'x' ,'y','z',0}; 
    pFile = fopen("C:\\Test\\myfile.bin","wb"); 

    if (pFile){ 
     fwrite(buffer,1,sizeof(buffer),pFile); 

    printf("The buffer looks like: %s",buffer); 
    } 
    else 
    printf("Can't open file"); 


    fclose(pFile); 
    getchar(); 
    return 0; 
} 

我想写点东西验证我写的文件,然后从文件中读取和验证我读出文件。如何做到这一点最好?我还需要找出一种方法将相同的东西写入2个不同的文件。这甚至有可能吗?

回答

3

我认为你正在寻找的东西是这样的:

FILE* pFile; 
char* yourFilePath = "C:\\Test.bin"; 
char* yourBuffer = "HelloWorld!"; 
int yorBufferSize = strlen(yourBuffer) + 1; 

/* Reserve memory for your readed buffer */ 
char* readedBuffer = malloc(yorBufferSize); 

if (readedBuffer==0){ 
    puts("Can't reserve memory for Test!"); 
} 

/* Write your buffer to disk. */ 
pFile = fopen(yourFilePath,"wb"); 

if (pFile){ 
    fwrite(yourBuffer, yorBufferSize, 1, pFile); 
    puts("Wrote to file!"); 
} 
else{ 
    puts("Something wrong writing to File."); 
} 

fclose(pFile); 

/* Now, we read the file and get its information. */ 
pFile = fopen(yourFilePath,"rb"); 

if (pFile){ 
    fread(readedBuffer, yorBufferSize, 1, pFile); 
    puts("Readed from file!"); 
} 
else{ 
    puts("Something wrong reading from File.\n"); 
} 

/* Compare buffers. */ 
if (!memcmp(readedBuffer, yourBuffer, yorBufferSize)){ 
    puts("readedBuffer = yourBuffer"); 
} 
else{ 
    puts("Buffers are different!"); 
} 

/* Free the reserved memory. */ 
free(readedBuffer); 

fclose(pFile); 
return 0; 

问候

+0

优秀!!!我会如何做到这一点,而不是我会用数字而不是字符串和字母? – Questioneer

+0

数字,结构,字符串...全部是具有存储器地址的存储器块。所以你可以把这块内存块转换成一个字节缓冲区,然后写入/读取到一个没有问题的文件。尝试像(char *)&myIntegerVariable类似的方式获取myIntegerVariable的地址和sizeof(int)来获得变长。祝你好运。 –

1

读取缓存的程序几乎是除“RB”同为读取的二进制和fread()代替fwrite()

记住,你必须知道你要读取缓冲区有多大,并有一定的记忆大小合适准备好接受它

+0

我是否可以将缓冲区大小包装在#define中并以此方式进行更改?我在缓冲区之后需要0,所以当我编译和运行时我不会看到“垃圾”。例如,当我使用上面的代码进行printf时,我看到了x y和z,但之后我看到了垃圾,因为它搜索了null。 – Questioneer

+0

@Questioneer,简单的测试是最简单的 - 稍后您可以检测文件大小并了解malloc。你需要在c后面标记字符串结尾的零结果,你打印一个字符串 - 你也可以遍历缓冲区并打印单个字符 –

+0

我知道这一点?!?! – Questioneer

相关问题