一次读写一块字符(fread fwrite) 文本操作:
#include "stdafx.h"
#if 0
----int fwrite(void *buffer, int num_bytes, int count, FILE *fp)
//把buffer指向的数据写入fp指向的文件中
//fread(起始地址,最小单元,读取个数,文件句柄)>0
----int fread(void *buffer, int num_bytes, int count, FILE *fp)
//把fp 指向的文件中的数据读到 buffer 中
buffer : 指向要输入/输出数据存储区的首地址的指针
num_bytes : 一次要读/写字节的大小
count : 要读/写几个num_bytes大小的数据(或者看成读/写几次)
fp : 要读/写的文件指针
成功,返回读/写的字段数(有几个num_bytes大小的数据(相当于Count));
出错或文件结束,返回 0。
返回值返回的为 相应大小的个数,不够相应大小则返回0
应注意返回值的陷阱 以最小的单元格式进行读, 或是写入的最小单元进行读。
将 num_bytes 的值设置小些 count 的值设置大些
fread((void*)buf, 1, 1024, fp)
fread fwrite 对特殊字符 特殊格式(\n \r \t等)不敏感 把它们只当作
普通字符 不会发生中断等情况
#endif
int _tmain(int argc, _TCHAR* argv[])
{
//读取文本
FILE* fp = fopen("bin.txt", "rb");
//bin.txt:aaaaaaaaaabbbbbbbbbbccccccccccdddddddddd
if (NULL == fp)
return -1;
char buf[1024];
//int n;
//while ((n=fread((void*)buf, 1, 3, fp)) > 0)
//{
// printf("n=%d %c%c%c\n",n, buf[0], buf[1], buf[2]);
// //此时会多打印俩个d,因为每次fread后相当于将读取的值覆盖到buf中
// //最后一次只读到了一个d,但是只覆盖了buf中的buf[0],而buf[1]和buf[2]
// //还是上一次fread之后的值d,所以会多打印俩个d
//}
int n;
while ((n = fread((void*)buf, 1, 3, fp)) > 0)
{
printf("n=%d\t", n);
for (int i = 0; i < n; i++)
{
printf("%c\t", buf[i]);//相当于读到几个数据就打印几个
}
printf("\n");
}
return 0;
}
一次读写一块字符(fread fwrite) 二进制操作:
#include "stdafx.h"
#if 0
前面所学的所有的文件接口函数,要么以‘\0’,表示输入结束,
要么以‘\n’EOF(0xFF)表示读取结束。‘\0’‘\n’等都是文本
文件的重要标识,而二进制文件,则往往以块的形式,写入或读出
#endif
int _tmain(int argc, _TCHAR* argv[])
{
int a[10] = { 0xFF, '\0', 0x0D, '\n', 11, 22, 33, 44, 55, 66 };
FILE * fp = fopen("bin.txt", "wb+");
fwrite((void*)a, sizeof(a), 1, fp);
fwrite((void*)a, sizeof(a), 1, fp);
fwrite((void*)a, sizeof(a), 1, fp);
fwrite((void*)a, sizeof(a), 1, fp);
fwrite((void*)a, sizeof(a), 1, fp);
fwrite((void*)a, sizeof(a), 1, fp);
fwrite((void*)a, sizeof(a), 1, fp);
rewind(fp);
int buf[10];
while (fread((void*)buf, sizeof(int[10]), 1, fp)>0)
{
for (int i = 0; i<10; i++)
{
printf("%x==", buf[i]);
}
printf("\n");
}
return 0;
}