c/c++C语言基础

C语言基础---文件块的读写

2018-07-19  本文已影响1人  ZebraWei

版权声明:本文为小斑马伟原创文章,转载请注明出处!
一、文件块写文件
size_t fwrite(const void ptr,size_t size , size_t nmemb, FILE * stream);
功能: 以数据块的方式给文件写入内容
参数: ptr: 准备写入文件数据的地址 size: size_t 为unsigned int 类型,此参数指定写入文件内容的块数据大小 nmemb: 写入文件的块数,写入文件数据总大小为: size
nmemb .stream: 已经打开的文件指针
返回值:成功:实际成功写入文件数据的块数目,此值和nmemb相等 失败 0
文件打开模式
第二个参数的几种形式(打开文件的方式):

打开模式 含义
r或rb 以只读方式打开一个文本文件(不创建文件,若文件不存在则报错)
w或wb 以写方式打开文件(如果文件存在则清空文件,文件不存在则创建一个文件)
a或ab 以追加方式打开文件,在末尾添加内容,若文件不存在则创建文件
r+或rb+ 以可读、可写的方式打开文件(不创建新文件)
w+或wb+ 以可读、可写的方式打开文件(如果文件存在则清空文件,文件不存在则创建一个新文件
a+或ab+ 以添加方式打开文件,打开文件并在末尾更改文件,若文件不存在则创建文件

注意:

int main() {
FILE* fp = fopen("D:/c.txt", "wb");
if (!fp)
    return -1;

int a = 55678;
fwrite(&a, sizeof(int), 1, fp);
fclose(fp);

return 1;
}

int main(void) {
FILE*  fp = fopen("D:/c.txt", "rb");
if (!fp)
    return -1;

int value;
fread(&value, sizeof(int), 1, fp);
printf("%d\n", value);

return 0;

三、文件块读写数组数据到文件

int main() {
FILE*  fp = fopen("D:/c.txt", "rb");
if (!fp)
    return -1;

int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 10 };
fwrite(arr, sizeof(int), 10, fp);

fclose(fp);

return 0;
}

//读出数组
int main() {
FILE*  fp = fopen("D:/c.txt", "rb");
if (!fp)
    return -1;

int arr[] = { 0 };
fread(arr, sizeof(int), 10, fp);

for (int i = 0; i < 10; i++) {
    printf("%d\n", arr[i]);
}

fclose(fp);

return 0;
}

四、文件块读写结构体到文件

struct student
{
   char name[21];
   int age;
   int score;
   char addr[51];
}stu;

//写入
int main(){
stu ss[3] = {
    { "阿道夫", 9, 10, "北京" };
    {"松岛枫", 3, 1000, "南京"};
    {"陈胜", 43, 1, "大同"};
}

FILE*  fp = fopen("D:/c.txt", "rb");
if (!fp)
    return -1;

for (int i = 0; i < 3; i++) {
    fwrite(&ss[i], sizeof(stu), 1, fp);
}

fclose(fp);

system("pause");
return 0;
}

//读出
int main(void) {
FILE* fp = fopen("D:/c.txt", "rb");
if (!fp)
    return -1;

stu* ss = (stu*)malloc(sizeof(stu)* 3);

int i = 0; 
while (!feof(fp)) {
    fread(&ss[i], sizeof(stu), 1, fp);
    i++;
}

for (int i = 0; i < 3; i++) {
    printf("姓名:%s\n", ss[i].name)
    printf("年龄:%d\n", ss[i].age);
    printf("成绩:%d\n", ss[i].score);
    printf("地址:%s\n", ss[i].addr);
}

free(ss);
fclose(fp);
return 0;
}
上一篇 下一篇

猜你喜欢

热点阅读