C操作文本

1. 文件和unicode的关系?
没关系,文件是文件,unicode是unicode编码。将文件想象成二进制数据,如果你存入文件时存入的是unicode字符(比如每字符是两字节的),
那么整个文件是unicode字符的二进制数据。反之,如果存入的是ASCII字符,那么整个文件就是ASCII字符组成的二进制。
读取也可以按照字符读取也可以按照二进制读取,
如果是按照字符读取,如果你知道文件里存取的都是unicode字符,如果你使用w版本的getc读取,应该是一个unicode字符(没试过)。否则你使用
普通getc读取字符,那么应该是一个ASCII字符(没试过).
如果是二进制读取的,fread(buf, sizeof(char), 15, pFile);一个字符一个字符的读取,哪怕是unicode字符,读取的都是二进制的数据。

unicode真正对文件操作有点影响的是,打开文件时,按照文件名是不是unicode的,可以有两个版本,
ASCII版本:
fopen("c://text.txt", "rb");
_wfopen(_T("c://text.txt", _T("rb")); //Windows unicode version.

2.fseek和ftell
fseek(pFile, 0, SEEK_SET);
long pos = ftell(pFile); // pos == 0

文件移动到了文件开头,并且ftell的值是0, 比如文件是3个字符的,如下显示

这个位置 a b c
|
那么可以将当前文件指针想象成在第一个字符之前的那个位置.

此时char buf[2] = {0};fread(buf, sizeof(char), 1, pFile);就读取了a字符.

3. 判断文件长度
    fseek(pFile, 0, SEEK_SET);
    fseek(pFile, 0, SEEK_END);
    long nPos = ftell(pFile);

    如果文件内容还是上面的3个字符,那么nPos = 3;也就是最后一个字符的位置。

4. 读写操作
读取:
fread(buf, sizeof(char), 15, pFile);返回值是读取的个数。如果内容是空的,那么返回0。如果想读15个字节,
但是文件内容是12个字节,那么就返回12..使用feof(pFile) != 0 && ferror(pFile) != 0来判断是否读到文件末尾,或者是否出错了,
出错了是否也要判断并且进行处理呢?我觉得没有必要。什么时候会出现错误呢?如果错误了后续的整个文件操作都失败了。
    char buf[15] = {0};
    while (feof(pFile) == 0)
    {
        size_t nCnt = fread(buf, sizeof(char), 15, pFile);
        ++nCnt;
    }

写入:
size_t fwrite(
   const void *buffer,
   size_t size,
   size_t count,
   FILE *stream
);
fwrite比较简单,返回值表示写入的字节数,失败的时候写入的个数会比想写的个数少?(当磁盘满的时候会出现这种情况吗?)

无论读取和写入,文件指针会自己移动的,比如对于3个字符的文件,你读取了一个字符,你么文件指针就指向第一个字符。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值