<C> 头文件 文件

一.头文件

1.头文件不仅仅只是系统中自带的 也可以自定义

2.举例:

1 #include "My.h"

自定义的头文件中:可以放系统头文件 可以放typedef 可以放宏 可以放自定义声明的函数

注:自定义头文件的时候要用 双引号" "

系统的头文件都是用尖括号< > 但是引系统用双引号也可以

用双引号的话 就是先在自定义的头文件中找 如果没找到的话 就在系统头文件中找

二.文件

(PS:下面所有代码中的C:\My.txt中存的是:1234567890)

1.特点:可以长久的保存数据

2.文件存在的两种形式:

①字符形式(ASCⅡ):文本文件

例如:txt文档 xx.c 头文件 这些都是以字符形式存储的

注:文本文件的结尾是EOF

②二进制文件:

大部分文件的存在方式都是以二进制文件的形式存在的

3.文件缓冲区:

①写:数据→缓冲区→物理文件

②读:数据←缓冲区←物理文件

4.文件使用:

①打开文件:FILE* fopen("文件路径","打开方式")

1 #include<stdio.h>
2 int main()
3 {
4     FILE* pFile = fopen("C:\\My.txt","r");
5
6     return 0;
7 }

FILE是返回一个结构体的指针

文件路径是绝对路径 本身所在的位置

但是输入文件路径的时候 最好不要直接粘过来 最好手打

并且需要特别特别注意的是:"\"是一个转义字符 是把前后内容连接上的 得打两个"\" 才能获取到正常的文件

打开方式分为:"w" "w+" "r" "r+" "a" "a+"

"w":以只读方式打开

"w+":以可读写的方式打开

"r":以只写方式打开 如果文件中有内容就删除 若文件不存在则建立

"r+":以可读写方式打开 如果文件中有内容就删除 若文件不存在则建立

"a":以附加方式打开 如果文件不存在则建立 若存在则写入的数据会加入文件末尾

"a+":以附加可读写打开 如果文件不存在则建立 若存在则写入的数据会加入文件末尾

如果在后面加上了b 如"wb" 就是对二进制文件进行操作

但是!fopen这个函数是不安全的!

所以我们最好用这个安全的函数用来打开文件:errno_t fopen_s(文件名地址,"文件路径","打开方式")

1 #include<stdio.h>
2 int main()
3 {
4     FILE* pFile = NULL;
5     int n = fopen_s(&pFile,"C:\\My.txt","r");
6
7     return 0;
8 }

它的其中一个返回值是0 代表成功打开这个文件

②读文件:size_t fread(放到哪个地址,一次读几个,一共读几次,从哪个文件读)

 1 #include<stdio.h>
 2 int main()
 3 {
 4     FILE* pFile = NULL;
 5     int n = fopen_s(&pFile,"C:\\My.txt","r");
 6
 7     char str[10] = {0};
 8     int nRead = fread(str,1,5,pFile);
 9
10     printf("%s\n",str);
11 }

执行结果为12345

上面的代码中nRead的值 就是读到的字节数 读几块

例题:

 1 #include<stdio.h>
 2 int main()
 3 {
 4     FILE* pFile = NULL;
 5     int n = fopen_s(&pFile,"C:\\My.txt","r");
 6
 7     char str[10] = {0};
 8     char str1[10] = {0};
 9     int nRead = fread(str,1,5,pFile);
10     int nRead1 = fread(str1,1,3,pFile);
11
12     printf("%s\n",str);
13     printf("%s\n",str1);
14
15     return 0;
16 }

这段代码的执行结果是:

12345

678

这就说明了指针是停留在读到的地方的

如果继续进行读操作 那么指针是在停留的地方继续往下移动的

③写文件:size_t fwrite(从哪个地址走,一次写几个,一共写几次,写入哪个文件中)

 1 #include<stdio.h>
 2 int main()
 3 {
 4     FILE* pFile = NULL;
 5     int n = fopen_s(&pFile,"C:\\My.txt","r+");
 6
 7     fwrite("abc",1,3,pFile);
 8
 9     return 0;
10 }

当打开文件方式为"r+"的时候 执行结果文件My.txt被写为:abc4567890

当打开文件方式为"w+"的时候 执行结果文件My.txt被写为:abc

当打开文件方式为"a+"的时候 执行结果文件My.txt被写为:1234567890abc

④关闭文件:

1 fclose(pFile);

有打开就一定要有关闭 以后一定要写关闭!

⑤进行连续的读写:fseek(文件指针,偏移量,从开始/结尾/当前位置开始)

引入:我们不难发现 我们不可以对一个文件同时进行读写 也就是说 我们不能读完了马上写 或者写完了马上读

那么解决这个文件我们就可以用到fseek函数

从哪个位置开始有三种:SEEK_SET(开始) SEEK_END(结尾) SEEK_CUR(当前)

 1 #include<stdio.h>
 2 int main()
 3 {
 4     FILE* pFile = NULL;
 5     int n = fopen_s(&pFile,"C:\\My.txt","r+");
 6     int nRead;
 7     char str[10] = {0};
 8
 9     fwrite("abc",1,3,pFile);
10
11     fseek(pFile,0,SEEK_CUR);
12
13     nRead = fread(str,3,1,pFile);
14     printf("%s\n",str);
15
16     fclose(pFile);
17
18     return 0;
19 }

执行结果:456

My.txt被改为:abc4567890

5.文件的简单简单简简单单加密:

#include<stdio.h>
int main()
{
    FILE* pFile = NULL;
    FILE* pFile1 = NULL;
    char c;

    fopen_s(&pFile,"C:\\My.txt","r+");
    fopen_s(&pFile1,"C:\\MySecret.txt","w+");

    while((c = getc(pFile)) != EOF)
    {
        putc(~c,pFile1);
    }

    fclose(pFile);
    fclose(pFile1);

    return 0;
}

这里需要特别注意的是:

在对文件进行操作的时候 获得字符用getc() 放字符用putc()

6.文件复制:

①字符文件的复制:

和上面简单简单简简单单加密的代码是一样 只不过放的时候c就不取反了

 1 #include<stdio.h>
 2 int main()
 3 {
 4     FILE* pFile = NULL;
 5     FILE* pFile1 = NULL;
 6     char c;
 7
 8     fopen_s(&pFile,"C:\\My.txt","r+");
 9     fopen_s(&pFile1,"C:\\MyCopy.txt","w+");
10
11     while((c = getc(pFile)) != EOF)
12     {
13         putc(c,pFile1);
14     }
15
16     fclose(pFile);
17     fclose(pFile1);
18
19     return 0;
20 }

②二进制文件的复制:

 1 #include<stdio.h>
 2 int main()
 3 {
 4     FILE* pFile = NULL;
 5     FILE* pFile1 = NULL;
 6     char buf[1024] = {0};
 7     int nRead;
 8
 9     fopen_s(&pFile,"C:\\Users\\pc\\Desktop\\1.jpg","rb");
10     fopen_s(&pFile1,"C:\\Users\\pc\\Desktop\\2.jpg","wb");
11
12     while(1)
13     {
14         nRead = fread(buf,sizeof(char),1024,pFile);
15         if(nRead <= 0)
16         {
17             break;
18         }
19         fwrite(buf,sizeof(char),1024,pFile1);
20     }
21
22     fclose(pFile);
23     fclose(pFile1);
24
25     return 0;
26 }

这里需要注意的是:打开方式一定要用二进制文件的打开方式 rb和wb

原文地址:https://www.cnblogs.com/Aaaaaalei0612/p/8998678.html

时间: 2024-11-10 13:13:03

<C> 头文件 文件的相关文章

利用PHP取二进制文件头判断文件类型

<?php $files = array('D:\no.jpg', 'D:\no.png','D:\no2.JPEG','D:\no.BMP'); $fileTypes = array( 7790 => 'exe', 7784 => 'midi', 8297 => 'rar', 255216 => 'jpg', 7173 => 'gif', 6677 => 'bmp', 13780 => 'png' ); foreach($files as $file) {

Linux下查找包含BOM头的文件和清除BOM头命令 2014-08-16 12:30:50

Linux下查找包含BOM头的文件和清除BOM头命令 2014-08-16 12:30:50 分类: 系统运维 查找包含BOM头的文件,命令如下: 点击(此处)折叠或打开 grep -r -I -l $'^\xEF\xBB\xBF' ./ \xef\xbb\xbf是UTF8 BOM的16进制表示 这个命令会把当前目录及所有子目录下的BOM头删除掉. 点击(此处)折叠或打开 find . -type f -exec sed -i 's/\xEF\xBB\xBF//' {} \; 另一种方法: 点击

通过判断流的头 判断文件类型

图片文件 文件类型 扩展名 16进制数字xx这里表示变量 Ascii数字. = 不是Ascii字符 Bitmap format .bmp 42 4d BM FITS format .fits 53 49 4d 50 4c 45 SIMPLE GIF format .gif 47 49 46 38 GIF8 Graphics Kernel System .gks 47 4b 53 4d GKSM IRIS rgb format .rgb 01 da .. ITC (CMU WM) format .

linux下SVN忽略文件/文件夹的方法

linux下SVN忽略文件/文件夹的方法 假设想忽略文件temp 1. cd到temp所在的目录下: 2. svn propedit svn:ignore . 注意:请别漏掉最后的点(.表示当前目录),如果报错请看下面 3. 打开的文件就是忽略列表文件了(默认是空的),每一行是一项,在该文件中输入temp,保存退出 4. svn st查看状态,temp的?状态已经消除了 如果在svn propedit svn:ignore .时报错:svn: None of the environment va

Linux命令行基本文件/文件夹操作

对文件的操作 创建空文件:   touch +文件名   # 一般是先touch好一个文件然后vim这个文件. 很好奇为什么叫touch.删除文件:  rm +文件名         # 直接就没了,不会到回收站 复制文件到指定位置: cp +文件 + 目标目录  # 例如 cp file sub 把当前目录下的file文件复制到了当前目录子目录sub里面.重命名/移动文件: mv +文件(文件夹) + 目标目录 # 例如 mv dir1 dir2/new 把文件夹dir1(及其内容)移动到了跟

android如何保存读取读取文件文件保存到SDcard

android如何保存读取读取文件文件保存到SDcard 19. 三 / android基础 / 没有评论 本文来源于www.ifyao.com禁止转载!www.ifyao.com 上图为保存文件的方法体. 上图为如何调用方法体保存数据. 上面的截图介绍了,文件保存的基本内容. 路径也可以更改. 将内容保存到文件介绍完毕. 本文来源于www.ifyao.com禁止转载!www.ifyao.com 读取文件方法体,将方法返回值传给控件即可. 保存文件的四种操作模式 将文件保存到手机的SDcard路

文件/文件夹权限设置命令chmod的具体使用方法

chmod是文件/文件夹权限设置的命令,在Linux中常常遇到.本博文下面总结chmod的具体使用方法. Linux/Unix的档案调用权限分为三级,即档案拥有者user.群组group.其它other.u表示该档案的拥有者.g表示与该档案的拥有者属于同一个群体(group)者,o表示其它以外的人,a表示这三者皆是. + 表示添加权限.- 表示取消权限.= 表示唯一设定权限. r表示可读取,w表示可写入,x表示可运行. 举例说明: (1).将档案file1.txt 设为全部人皆可读取: chmo

【SVN】删除文件/文件夹 svn: E205007: Could not use external editor to fetch log message

在SVN Server上删除文件/文件夹 svn delete 文件的URL -m "评论" 一定要加 -m 不然会报错 svn: E205007: Could not use external editor to fetch log message

菜鸟学Linux - 文件/文件夹的隐藏属性

文件/文件夹居然还有隐藏属性?没错,隐藏属性对于文件/文件夹的安全很重要.好比如说,我们需要使用”鉴定符“来揭开装备的隐藏属性:在Linux中chattr/lsattr就是“鉴定符”. chattr基本格式为:chattr +-=[acdeijstuADST] .+表示增加某种隐藏属性:-表示取出某种隐藏属性:=表示直接设置隐藏属性.man chattr可知: The letters ‘acdeijstuADST’ select the new attributes for the files:

Node.js 切近实战(七) 之Excel在线(文件&文件组)

最近西安的天气真他妈的热,感觉还是青海的天气美,最高温28度.上周逛了青海湖,感觉还是意犹未尽,其实我还是很喜欢去一趟西藏的,但是考虑到花费也没人陪我,我暂时放弃这个念头.计划去一下重庆或者甘南,也许是现实的. OK,废话不多说,今天我们来看一下Excel在线部分的文件和文件组.首先我们来看一下页面,调一下胃口.俗话说无图无真相,先看图. 没错,还是Telerik Kendo UI,其实我面试的时候当听到别人说自己用的是EasyUI和ExtJs的时候,我就不那么上心,但是如果有人用的是Kendo