C语言文件操作入门指南

C 语言文件读写操作

前言

#include <stdio.h>

int main() {
    FILE * file = fopen("hello.txt", "rw");  //使用fopen函数来打开一个文件
}

image-20230716214639392

当我们在Clion中输入上述代码时,系统会友情提示我们需要在括号里填写两个特殊变量,让我们来认识一下它们吧!

首先,让我介绍给大家主角之一,__filename,这是一个包含文件路径的字符串常量,它告诉计算机我们要读取或写入哪个文件。你可以将其视为文件的身份证,因为它唯一地标识了文件的位置和名称。在填写这个参数时,你可以指定相对路径或绝对路径,让计算机准确找到目标文件。

接下来,让我们认识另一个关键角色,__mode,这是一个代表访问模式的字符串常量。它告诉计算机我们要以何种方式打开文件,以便进行读取或写入操作。你可以将其视为文件的访问权限,因为它决定了我们能否读取、写入或创建文件。常见的访问模式包括只读(“r”)、写入(“w”)和追加(“a”),当然还有其他更多选项供你探索。

所以,当我们在Clion中填写这两个参数时,我们实际上在向计算机提供了必要的信息,告诉它我们要处理哪个文件以及以何种方式进行操作。这让计算机能够准确理解我们的意图,让我们在文件读写的舞台上自如驰骋!

  • 第一个参数:文件的名称,这里我填写的是相对路径(在cmake-build-debug文件下),也可以写成绝对路径(win系统带上盘符)
  • 第二个参数:打开文件的模式,其中模式有以下这些(平时主要使用读写操作,因此rw用的比较多):
模式字符串含义
“r”以读模式打开文件
“w”以写模式打开文件,把现有文件的长度截为0,如果文件不存在,则创建一个新文件
“a”以写模式打开文件,在现有文件末尾添加内容,如果文件不存在,则创建一个新文件
“r+”以更新模式打开文件(即可以读写文件)该文件必须存在
“w+”以更新模式打开文件(即可以读写文件),如果文件存在,则将其长度截为0;如果文件不存在,则创建一个新文件
“a+”以更新模式打开文件(即,读写),在现有文件的末尾添加内容,如果文件不存在则创建一个新文件;可以读整个文件,但是只能从末尾添加内容
“rb”,“wb”,“ab”,“ab+”,“a+b”,“wb+”,“w+b”与“a+”模式类似,但是以二进制模式打开文件而不是以文本模式打开文件

具体的不同打开模式会影响到后续的操作,我们后面再说。这里我们使用r表示可读。

读文件

截止到目前为止,这样我们就成功打开了这个文件,那么如何对文件进行读取操作呢?我们可以使用getc来快速读取文件中的字符,与getchar不同的是,getchar是在控制台实现输入,而getc是文件的输入:

#include <stdio.h>

int main(){
    FILE* file = fopen("hello.txt", "r");
    if(file != NULL){
        printf("文件打开成功!\n");
        int c;
        while ((c = getc(file)) != EOF){
            putchar(c);
        }
        fclose(file);			//fclose用于关闭文件
        printf("\n");
        printf("文件已关闭!\n");
    } else{
      	puts("文件打开失败!");
    }
}

image-20230716214952108

当然,如果文件不存在或者文件打开失败,getc函数可能会返回一个空指针。因此,我们需要进一步判断,确保文件操作的顺利进行。此外,务必记得在使用完文件后关闭它,释放资源,否则该文件将一直被占用,其他人将无法调用它。因此,合理的操作应包括打开文件、读取文件内容,并在完成后及时关闭文件,这样才能保持系统的正常运行。

写文件

那么读取文件我们知道了,写入呢?写入我们同样可以使用putc来完成:

#include <stdio.h>

int main() {
    FILE * file = fopen("hello.txt", "w");   //注意这里需要修改为写模式
    if(file != NULL) {
        for (int i = 0; i < 10; ++i)
            putc('A' + i, file);   //从A开始依次写入10个字符
        fclose(file);
    } else{
        puts("文件打开失败!");
    }
}

image-20230716215204409

细心的读者可能会注意到,在开始时我们向.txt文本文件中写入了"Hello World!"的内容,但现在发现文本内容已经被覆盖了。那么如果我们希望在之前的文本内容后面继续添加内容,我们应该如何操作呢?

这就是时候展示前面提到的文件打开模式的作用了!在这种情况下,我们可以选择以追加模式(a)打开文件,然后再次运行代码。

通过以追加模式打开文件,我们可以将新的内容添加到文件的末尾,而不会覆盖之前的内容。这样,我们就可以在文件中持续记录并保存我们想要添加的内容,而不会丢失之前的数据。

因此,记住在打开文件时,根据需要选择适当的模式,以确保我们的操作与期望一致,并且文件内容能够得到正确的追加。

FILE * file = fopen("hello.txt", "a");   //注意这里需要修改为能从末尾添加内容

image-20230716215514340

补充内容

不过这里要补充一下,文件的读写实际上并不是直接对文件进行操作的,在这之间还有一个缓冲区:

image-20220628141209105

我们经常在别人的代码中常常看见这样一行代码fflush(file);,咱也不知道为什么要这行代码,只知道使用fflush来刷新缓冲区,那么究竟是为什么呢?这个就和缓冲区有关了。

我们所有的读操作,首先是从文件读取到缓冲区中,再从缓冲区中读取到程序中的;写操作就是先写入到缓冲区,然后再从缓冲区中写入到文件中。这样做的目的是,因为内存和硬盘的速度差距有点大,为了解决这种速度差异导致的性能问题,所以设定一个缓冲区,这样就算速度不一样,但是内容被放在缓冲区中慢慢消化就没问题了。

虽然缓冲区能够解决这些问题,但是也会带来一些不便之处,比如下面的例子:

#include <stdio.h>

int main() {
    FILE * file = fopen("hello.txt", "a+");   //注意这里需要修改为写模式
    if(file != NULL) {
        while (1) {
            int c = getchar();   //不断从控制台读取字符
            if(c == 'q') break;
            putc(c, file);  //写入到文件中
        }
        fclose(file);
    }
}

我们发现当我们敲了一个字符之后,可能并不会马上更新到文件中,这就是由于缓冲区没有及时同步到文件中,所以我们需要调用一个函数来刷新缓冲区,将那些缓冲区的没有同步的数据全部同步到文件中:

#include <stdio.h>

int main() {
    FILE * file = fopen("hello.txt", "a+");
    if(file != NULL) {
        while (1) {
            int c = getchar();
            if(c == 'q') break;
            putc(c, file);
            fflush(file);   //使用fflush来刷新缓冲区
        }
        fclose(file);
    }
}

执行上述代码,然后重新打开hello.txt文件,可以看见从控制台输入的内容立马就写入到了文本文件中去了。

感谢阅读!掌握C语言文件读写操作,编程之旅更进一步!💻🚀

数据中心机房是现代信息技术的核心设施,它承载着企业的重要数据和服务,因此,其基础设计与规划至关重要。在制定这样的方案时,需要考虑的因素繁多,包括但不限于以下几点: 1. **容量规划**:必须根据业务需求预测未来几年的数据处理和存储需求,合理规划机房的规模和设备容量。这涉及到服务器的数量、存储设备的容量以及网络带宽的需求等。 2. **电力供应**:数据中心是能源消耗大户,因此电力供应设计是关键。要考虑不间断电源(UPS)、备用发电机的容量,以及高效节能的电力分配系统,确保电力的稳定供应并降低能耗。 3. **冷却系统**:由于设备密集运行,散热问题不容忽视。合理的空调布局和冷却系统设计可以有效控制机房温度,避免设备过热引发故障。 4. **物理安全**:包括防火、防盗、防震、防潮等措施。需要设计防火分区、安装烟雾探测和自动灭火系统,设置访问控制系统,确保只有授权人员能进入。 5. **网络架构**:规划高速、稳定、冗余的网络架构,考虑使用光纤、以太网等技术,构建层次化网络,保证数据传输的高效性和安全性。 6. **运维管理**:设计易于管理和维护的IT基础设施,例如模块化设计便于扩展,集中监控系统可以实时查看设备状态,及时发现并解决问题。 7. **绿色数据中心**:随着环保意识的提升,绿色数据中心成为趋势。采用节能设备,利用自然冷源,以及优化能源管理策略,实现低能耗和低碳排放。 8. **灾难恢复**:考虑备份和恢复策略,建立异地灾备中心,确保在主数据中心发生故障时,业务能够快速恢复。 9. **法规遵从**:需遵循国家和地区的相关法律法规,如信息安全、数据保护和环境保护等,确保数据中心的合法运营。 10. **扩展性**:设计时应考虑到未来的业务发展和技术进步,保证机房有充足的扩展空间和升级能力。 技术创新在数据中心机房基础设计及规划方案中扮演了重要角色。例如,采用虚拟化技术可以提高硬件资源利用率,软件定义网络(SDN)提供更灵活的网络管理,人工智能和机器学习则有助于优化能源管理和故障预测。 总结来说,一个完整且高效的数据中心机房设计及规划方案,不仅需要满足当前的技术需求和业务目标,还需要具备前瞻性和可持续性,以适应快速变化的IT环境和未来可能的技术革新。同时,也要注重经济效益,平衡投资成本与长期运营成本,实现数据中心的高效、安全和绿色运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WeiComp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值