第二课:文件操作【问题查找和解决】

因为编译器的不同,可能运行的效果也不同,小编用VS2019的。

写出代码有问题,那就是考验一个人解决问题的能力体现。有问题不用怕,就怕没问题。Are you OK?

Ready!

项目下创建“Mr.she.txt”文件,同时输入一些字母。

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;

void WriteToFile();
int main()
{

    WriteToFile();

    system("pause");
    return 0;
}

void WriteToFile()
{
    FILE* f_Writed = NULL;     //写入流对象
    FILE* f_Read = NULL;       //读出流对象

        //打开文件
    f_Read = fopen("Mr.she.txt", "r");     //Mr.she.txt 就是要用到的文件名,小编先在项目下创建好了,‘r’只读属性,就是防止写入的功能
   //判断文件打开是否失败
    if (!f_Read)
    {
        cout << "文件打开失败!" << endl;
        system("pause");
        return;
    }

    f_Writed = fopen("Mr.jie.txt", "w");
    //判断写入时,文件打开与否
    if (!f_Writed)
    {
        cout << "文件打开失败!" << endl;
        system("pause");
        return;
    }

    cout << "文件打开成功!" << endl;

    //写入和读出
   //  还没写呢
      //关闭流对象
    if (f_Writed || f_Read)
    {
        fclose(f_Writed);
        fclose(f_Read);
    }
}

运行后,就能输出文件打开了。

fread(void* buffer,size_t  _Elementsize,size_t _Elementcount,File* stream);
write(void* buffer,size_t _Elementsize,size_t _Elementcount,File* stream);

读出和写入的函数,虽然传入的参数略同,但是实现的功能却不一样,详解请看他人博客,小编就不多说了。记住:它们返回的值都是size_t类型(字节数),

看一个人的代码技术含量,会看函数返回值就是能力之一。

void WriteToFile()
{
    FILE* f_Writed = NULL;     //写入流对象
    FILE* f_Read = NULL;       //读出流对象

        //打开文件
    f_Read = fopen("Mr.she.txt", "r");     //Mr.she.txt 就是要用到的文件名,小编先在项目下创建好了,‘r’只读属性,就是防止写入的功能
   //判断文件打开是否失败
    if (!f_Read)
    {
        cout << "文件打开失败!" << endl;
        system("pause");
        return;
    }

    f_Writed = fopen("Mr.jie.txt", "w");
    //判断写入时,文件打开与否
    if (!f_Writed)
    {
        cout << "文件打开失败!" << endl;
        system("pause");
        return;
    }

    cout << "文件打开成功!" << endl;

    //写入和读出

    //声明一些需要用到的变量
    char              stringname[256] = { 0 };              //用来存储文件被读出的数据
    int               ret = 0;                            //接收feof()状态值
    size_t            readLength = 0;                     //接收fread()数据大小值
    size_t            writeLength = 0;                    //接收fwrite()数据大小值
    //读出、写入文件
    while ((ret = feof(f_Read)) != EOF)
    {
        //读出文件,因为我们假设不知道文件所写的是什么内容,文件又不大的话,可以先设定为256
        //当然sizeof(stringname)也行
        readLength = fread((char*)stringname, 1,sizeof(stringname), f_Read);

        //做个打印输出,以判断是否读出
        /*for (int i =0;i<readLength ; i++)
        {
            cout << stringname[i] << endl;
        }*/


        //打开文件,依次将每读出一块数据,数据可以设定,然后写入到文件中
        writeLength = fwrite((char*)stringname,1, readLength, f_Writed);

        //当读取完毕,结束继续读,feof()这个函数会读取2次
        if (ret == feof(f_Read))
        {
            system("pause");
            break;
        }
    }

    //判断当写入和读出两个数据完全不同,则爆出提示错误,退出
    if (readLength != writeLength)
    {
        cout << "写入文件失败,请检查是否磁盘溢满!" << endl;
    }

   //  还没写呢
      //关闭流对象
    if (f_Writed || f_Read)
    {
        fclose(f_Writed);
        fclose(f_Read);
    }
}

运行后的结果就是,“Mr.jie.txt”文件内能输出你手头所输入的数据。

posted @ 2020-10-07 17:38  邪气凛然  阅读(200)  评论(0编辑  收藏  举报