C++中随机存取文件的处理(2)

这段代码显示了一个简单的打开待写的二进制文件,文本字符(char*)会写入该文件。通常你会使用文本文件但是笔者想证明你可以向二进制文件写入文本。

// ex1.c
#include < stdio.h>
#include < string.h>
int main(int argc, char * argv[])
{
const char * filename="test.txt";
const char * mytext="Once upon a time there were three bears.";
int byteswritten=0;
FILE * ft= fopen(filename, "wb") ;
if (ft) {
fwrite(mytext,sizeof(char),strlen(mytext), ft) ;
fclose( ft ) ;
}
printf("len of mytext = %i ",strlen(mytext)) ;
return 0;
}

例一的作用

这个例子打开了一个待写的二进制文件。FILE*变量从fopen()调用中返回。如果这一操作失败那么它会返回为0.
Fopen()命令试图打开指定的文件,在这个案例中则是位于相同文件夹的test.txt.记住,如果文件包含一个路径那么所有的退格必须重叠。“c:\folder\test.txt”是错误的,你必须使用“c:\\folder\\test.txt”。
由于文件样式是wb,我们正准备写入二进制文件。如果文件不存在则系统会创建一个文件,如果存在,则里面的内容都会被删除。如果调用fopen失败了,或许由于文件被打开了,或者其名称包括无效字符又或者一个无效路径那么fopen会返回0值。
虽然你可以只检查ft是否为0(值为0则成功),但是笔者还是添加了一个FileSuccess()函数来确保这一操作。在窗口中,它会显示调用是否成功以及文件名称。如果你失败了则可能需要修复。注意在Windows中一般没有多少输出文本可供系统调试器使用,
fwrite(mytext,sizeof(char),strlen(mytext), ft) ;

fwrite()调用输出了指定文本。第二,三个参数分别是字符的大小和字符串的长度。它们两个都是被size_t定义了。注意有了二进制文件后,即便你正在向文件中写入(char*)字符串,它也没有任何附加换行字符。如果你想要这些字符,你必须明确将这些字符包含到字符串中。

读写文件

打开一个文件的时候,必须指定打开的方式。这意味着如果你打算要为文件附加东西,那么是否要创建新文件并对其进行覆盖?它是文本文件还是二进制文件呢?是要读取文件还是要写文件呢?这样要通过使用一个或更多的文件模式分类符来完成,文件模式分类符是一些单独的字母“r”,“b”,“w”,“a”和+.“r”意思是打开文件以便读取。如果文件不存在或找不到文件这一操作会失败。“w”意思是待写方式或空文件方式打开文件。如果文件存在,则文件内容会被损坏。“a”表示打开文件,并准备从文件末端写入而不需要在写入新数据前删除EOF标记;如果不存在该文件则首先会创建一个文件。向文件模型添加+会创建下列三种新模型:

“r+”打开文件等待读取或写入。“w+”以空文件方式打开文件等待读取或写入。如果文件存在,则文件内容会被损毁。

“a+”打开文件等待读取或添加,添加的操作包括新数据写入前EOF标记的移除,以及写入完成后EOF标记的保存,如果文件不存在则先要创建文件。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwppsy.html