c语言文件读写 | 按字符,按行,按块

2019-08-06  本文已影响0人  yuanCruise
#define  _CRT_SECURE_NO_WARNINGS 
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

void main01_fputc()
{
    int     i = 0;
    FILE *fp = NULL;
    //char *filename = "c:\\1.txt";
    char *filename2 = "c:/2.txt";  // 统一的用45度 
    char a[27]= "abcdefghijklmn";
    fp = fopen(filename2, "r+");
    if (fp == NULL)
    {
        printf("func fopen() err:%d \n");
        return;
    }
    printf("打开成功\n");

    for (i=0; i<strlen(a); i++)
    {
        fputc(a[i], fp);
    }

    fclose(fp);


    return ;
}

void main02_fgetc()
{
    int     i = 0;
    FILE *fp = NULL;
    //char *filename = "c:\\1.txt";
    char *filename2 = "c:/2.txt";  // 统一的用45度 
    char a[27]= "abcdefghijklmn";
    fp = fopen(filename2, "r+"); //读和写方式
    if (fp == NULL)
    {
        printf("func fopen() err:%d \n");
        return;
    }
    printf("打开成功\n");

    while (!feof(fp))
    {
        char tempc = fgetc(fp);
        printf("%c", tempc);
        
    }

    if (fp != NULL)
    {
        fclose(fp);
    }

    return ;
}


void main11()
{
    //main01_fputc();
    main02_fgetc();
    printf("hello...\n");
    system("pause");
    return ;

}
#define  _CRT_SECURE_NO_WARNINGS 
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

void main21_fputs()
{
    int     i = 0;
    FILE *fp = NULL;
    //char *filename = "c:\\1.txt";
    char *filename2 = "c:/22.txt";  // 统一的用45度 
    char a[27]= "abcdefghijklmn";
    //fp = fopen(filename2, "r+");   //读写的方式 打开文件 如果文件不存在 则报错
    fp = fopen(filename2, "w+");   //读写的方式 打开文件 如果文件不存在 则报错
    if (fp == NULL)
    {
        printf("func fopen() err:%d \n");
        return;
    }
    printf("打开成功\n");

    /*
    for (i=0; i<strlen(a); i++)
    {
        fputc(a[i], fp);
    }
    */

    fputs(a, fp);

    fclose(fp);


    return ;
}

/*
char * myfgets(char *myp, int max, FILE *fp)
{
    strcpy(myp, "aaaaaa");
    return myp;
}
*/
void main22_fgets()
{
    int     i = 0;
    FILE *fp = NULL;
    //char *filename = "c:\\1.txt";
    char *filename2 = "c:/22.txt";  // 统一的用45度 
    //char a[27]= "abcdefghijklmn";
    char buf[1024];
    fp = fopen(filename2, "r+"); //读和写方式
    if (fp == NULL)
    {
        printf("func fopen() err:%d \n");
        return;
    }
    printf("打开成功\n");

    //1 //C 函数库 会 一行一行的copy数据 到buf指针所指的内存空间中 并且变成C风格的字符串
    //2 把\n也copy到我们的buf中
    //3 内存打包 (把内存首地址 + 内存的长度)
    while (!feof(fp))
    {
        //_Check_return_opt_ _CRTIMP char * __cdecl fgets(_Out_z_cap_(_MaxCount) char * _Buf, _In_ int _MaxCount, _Inout_ FILE * _File);
        char *p = fgets(buf, 1024, fp);  //C 函数库 会 一行一行的copy数据 到buf指针所指的内存空间中 并且变成C风格的字符串
        if (p == NULL)
        {
            goto End;
        }   
        printf("%s", buf);
    }
End:
    if (fp != NULL)
    {
        fclose(fp);
    }

    return ;
}


void main2211()
{
    //main21_fputs();
    main22_fgets();
    printf("hello...\n");
    system("pause");
    return ;

}
#define  _CRT_SECURE_NO_WARNINGS 
#include <stdlib.h>
#include <string.h>
#include <stdio.h>


//直接把内存数据 写入到 文件中
typedef struct Teacher
{
    char name[64];
    int age ;
}Teacher;

void main_fwrite()
{
    int i = 0;
    FILE *fp = NULL;
    char *fileName = "c:/3.data";
    Teacher tArray[3];
    int  myN = 0;

    for (i=0; i<3; i++)
    {
        sprintf(tArray[i].name, "%d%d%d", i+1, i+1, i+1);
        tArray[i].age = i + 31;
    }

    fp = fopen(fileName, "wb");
    if (fp == NULL)
    {
        printf("建立文件失败\n");
        return ;
    }
    for (i=0; i<3; i++)
    {
        //_Check_return_opt_ _CRTIMP size_t __cdecl 
        //  fwrite(_In_count_x_(_Size*_Count) const void * _Str, _In_ size_t _Size, _In_ size_t _Count, _Inout_ FILE * _File);
        //函数参数
        //_Str : 从内存块的开始
        //_Size  //内存打包技术
        //_Count 写多少次
        //_File : 写入到 文件指针 所指向的文件中

        //函数的返回值 
        myN = fwrite( &tArray[i],sizeof(Teacher) , 1, fp);

        //myN 判断 有没有写满  磁盘

    }

    if (fp != NULL)
    {
        fclose(fp);
    }

}

void main_fread()
{
    int i = 0;
    FILE *fp = NULL;
    char *fileName = "c:/3.data";
    Teacher tArray[3];
    int  myN = 0;



    fp = fopen(fileName, "r+b");
    if (fp == NULL)
    {
        printf("建立文件失败\n");
        return ;
    }
    for (i=0; i<3; i++)
    {
        //_Check_return_opt_ _CRTIMP size_t __cdecl 
        // fread(_Out_bytecap_x_(_ElementSize*_Count) void * _DstBuf, _In_ size_t _ElementSize, _In_ size_t _Count, _Inout_ FILE * _File);
        myN  = fread(&tArray[i], sizeof(Teacher), 1, fp);
        //函数的返回值 
        //myN = fwrite( &tArray[i],sizeof(Teacher) , 1, fp);

        //myN 判断 有没有写满  磁盘

    }

    for (i=0; i<3; i++)
    {
        //sprintf(tArray[i].name, "%d%d%d", i+1, i+1, i+1);
        //tArray[i].age = i + 31;
        printf("name:%s, age:%d \n", tArray[i].name, tArray[i].age);
    }

    if (fp != NULL)
    {
        fclose(fp);
    }

}

void main()
{
    //main_fwrite();
    main_fread();
    printf("hello...\n");
    system("pause");
    return ;
}
上一篇 下一篇

猜你喜欢

热点阅读