c语言下文件的使用

作者&投稿:酆秋 (若有异议请与网页底部的电邮联系)
C语言中如何调用文本文件~

1、首先使用VS新建空工程,直接点击确定。

2、点击新建项选项新建c文件,用于C语言编译器,输入main.c文件。

3、然后新建一个C文件。

4、将上述参考代码,复制到main.c文件内,直接编译即可。

5、编译完成后,运行exe程序,执行后就显示出了txt文件内容。

扩展名为.h的文件,在C语言中被称为header file, 也就是头文件。
头文件的数据格式就是普通的文本文件,可以通过新建文本文件(txt),再把扩展名改为.h的方式创建,在此不赘述。

一、头文件内容格式。
头文件内容并没有固定的格式要求,不过一般为防止嵌套引用给编译器带来死锁或者没必要的开销,一般约定整个头文件中所有内容在一个条件编译下,即如下格式:
#ifndef 宏名
#define 宏名
//头文件主体
#endif
这样可以保证一个头文件在一个源文件中最多只被引用一次。为避免宏名重复,宏名一般由头文件名转换而来,如果头文件名是xxx.h,那么宏名一般定义为:
_XXX_H_
即前后各加一个下划线,同时文件名中除数字、字母、下划线以外的字符均转换为下划线(_)。

头文件主体中内容同样没有做强制约定,可以出现在源文件(.c)中的任何代码均可以放在头文件中。不过一般情况下可以包括以下几种内容:
1 引用其它头文件,格式为
#include

#include "xxx.h"
二者区别在介绍头文件引用时再详细介绍。
2 定义私有类型。比如
typedef unsigned long U32; //为了简写而给无符号32位整型定义一个新的名字
struct xxx {};
也可以是enum, union等复杂类型。
3 宏定义。比如
#define MAX(a,b) (a>b?a:b)
4 函数声明。比如
void test_function(void);
5 全局变量声明。比如
extern int global_var;
6 如果有一个静态全局变量需要在不同源文件中使用,但各文件之间互不相关。那么可以放在头文件中。如:
static int gs_var = 3;

7 对于支持C99规范的C编译器,还可以把内联函数定义在头文件中。比如
static inline int get_min(int a, int b)
{
if(a>b) return b;
return a;
}
以上是常见的头文件中的元素。但实际上头文件中也可以放全局变量的定义,全局函数的实现等。但是头文件中一旦定义了这样的元素,这个头文件在一个工程中只能被一个文件引用,否则编译器会报重复定义的错误。
比如如果有一个规模很大的常量数组,比如一副图片的二进制值,如果把它定义在源文件中,就会显得很冗余,因为并不会经常修改。 这时可以定义在头文件中,只在一个源文件中引用,当有多幅图片需要随时更换时,也可以通过简单的在源文件中修改引用的头文件名达到修改的目的。

二、头文件的引用。
头文件引用的方法其实之前已经大致说过了,在源文件中引用头文件和在头文件中引用的格式是一样的:

#include或者
#include "xxx.h"
xxx为头文件名。
用和""是有一定的区别的。在编译器查找头文件的时候,会在两个区域分别查找。
一个是系统头文件区域,即类似于stdio.h一类的C库函数头文件区。
另一个是自定义头文件区,比如当前目录,以及其它自定义的目录。
用时,编译器会先在系统区域查找,然后再查找自定义区域。而用""时则相反。
由于一般并不推荐自定义头文件名与系统头文件名相同(容易引起歧义并难以维护),所以先后顺序并不是太重要,尤其在硬件速度越来越快的今天,使用哪种符号引用头文件已经差别很小了。

fopen
fread, fwrite
fclose

????
int open(char *pathname,int access[,int permiss]) 为读或写打开一个文件,按后按access来确定是读文件还是写文件,access值见下表:
┌————┬————————————————————┐
│access值│意义 │
├————┼————————————————————┤
│O_RDONLY│读文件 │
│O_WRONLY│写文件 │
│O_RDWR │即读也写 │
│O_NDELAY│没有使用;对UNIX系统兼容 │
│O_APPEND│即读也写,但每次写总是在文件尾添加 │
│O_CREAT │若文件存在,此标志无用;若不存在,建新文件 │
│O_TRUNC │若文件存在,则长度被截为0,属性不变 │
│O_EXCL │未用;对UNIX系统兼容 │
│O_BINARY│此标志可显示地给出以二进制方式打开文件 │
│O_TEXT │此标志可用于显示地给出以文本方式打开文件│
└————┴————————————————————┘

permiss为文件属性,可为以下值:
S_IWRITE允许写
S_IREAD允许读
S_IREAD|S_IWRITE允许读、写
int creat(char *filename,int permiss) 建立一个新文件filename,并设定读写性。
permiss为文件读写性,可以为以下值:
S_IWRITE允许写
S_IREAD允许读
S_IREAD|S_IWRITE允许读、写
int _creat(char *filename,int attrib) 建立一个新文件filename,并设定文件属性。
attrib为文件属性,可以为以下值:
FA_RDONLY只读
FA_HIDDEN隐藏
FA_SYSTEM系统
int creatnew(char *filenamt,int attrib) 建立一个新文件filename,并设定文件属性。
attrib为文件属性,可以为以下值:
FA_RDONLY只读
FA_HIDDEN隐藏
FA_SYSTEM系统
int creattemp(char *filenamt,int attrib) 建立一个新文件filename,并设定文件属性。
attrib为文件属性,可以为以下值:
FA_RDONLY只读
FA_HIDDEN隐藏
FA_SYSTEM系统
int read(int handle,void *buf,int nbyte) 从文件号为handle的文件中读nbyte个字符存入buf中。
int _read(int handle,void *buf,int nbyte) 从文件号为handle的文件中读nbyte个字符存入buf中,直接调用MSDOS进行操作.
int write(int handle,void *buf,int nbyte) 将buf中的nbyte个字符写入文件号为handle的文件中
int _write(int handle,void *buf,int nbyte) 将buf中的nbyte个字符写入文件号为handle的文件中
int dup(int handle) 复制一个文件处理指针handle,返回这个指针
int dup2(int handle,int newhandle) 复制一个文件处理指针handle到newhandle
int eof(int *handle) 检查文件是否结束,结束返回1,否则返回0
long filelength(int handle) 返回文件长度,handle为文件号
int setmode(int handle,unsigned mode) 本函数用来设定文件号为handle的文件的打开方式
int getftime(int handle,struct ftime *ftime) 读取文件号为handle的文件的时间,并将文件时间存于ftime结构中,成功返回0,ftime结构如下:
struct ftime
{
unsigned ft_tsec:5; /*秒*/
unsigned ft_min:6; /*分*/
unsigned ft_hour:5; /*时*/
unsigned ft_day:5; /*日*/
unsigned ft_month:4;/*月*/
unsigned ft_year:1; /*年-1980*/
}
int setftime(int handle,struct ftime *ftime) 重写文件号为handle的文件时间,新时间在结构ftime中.成功返回0.结构ftime如下:
struct ftime
{
unsigned ft_tsec:5; /*秒*/
unsigned ft_min:6; /*分*/
unsigned ft_hour:5; /*时*/
unsigned ft_day:5; /*日*/
unsigned ft_month:4;/*月*/
unsigned ft_year:1; /*年-1980*/
}
long lseek(int handle,long offset,int fromwhere) 本函数将文件号为handle的文件的指针移到fromwhere后的第offset个字节处.
SEEK_SET 文件开关
SEEK_CUR 当前位置
SEEK_END 文件尾
long tell(int handle) 本函数返回文件号为handle的文件指针,以字节表示
int isatty(int handle) 本函数用来取设备handle的类型
int lock(int handle,long offset,long length) 对文件共享作封锁
int unlock(int handle,long offset,long length) 打开对文件共享的封锁
int close(int handle) 关闭handle所表示的文件处理,handle是从_creat、creat、creatnew、creattemp、dup、dup2、_open、open中的一个处调用获得的文件处理成功返回0否则返回-1,可用于UNIX系统
int _close(int handle) 关闭handle所表示的文件处理,handle是从_creat、creat、creatnew、creattemp、dup、dup2、_open、open中的一个处调用获得的文件处理成功返回0否则返回-1,只能用于MSDOS系统
FILE *fopen(char *filename,char *type) 打开一个文件filename,打开方式为type,并返回这个文件指针,type可为以下字符串加上后缀。 type 读写性 文本/2进制文件 建新/打开旧文件
r 读 文本 打开旧的文件
w 写 文本 建新文件
a 添加 文本 有就打开无则建新
r+ 读/写 不限制 打开
w+ 读/写 不限制 建新文件
a+ 读/添加 不限制 有就打开无则建新

可加的后缀为t、b。加b表示文件以二进制形式进行操作,t没必要使用
例:
#include<stdio.h>
main()
{
FILE *fp;
fp=fopen("C:\\WPS\\WPS.EXE","r+b");
}

FILE *fdopen(int ahndle,char *type)
FILE *freopen(char *filename,char *type,FILE *stream)
int getc(FILE *stream) 从流stream中读一个字符,并返回这个字符
int putc(int ch,FILE *stream) 向流stream写入一个字符ch
int getw(FILE *stream) 从流stream读入一个整数,错误返回EOF
int putw(int w,FILE *stream) 向流stream写入一个整数
int ungetc(char c,FILE *stream) 把字符c退回给流stream,下一次读进的字符将是c
int fgetc(FILE *stream) 从流stream处读一个字符,并返回这个字符
int fputc(int ch,FILE *stream) 将字符ch写入流stream中
char *fgets(char *string,int n,FILE *stream) 从流stream中读n个字符存入string中
int fputs(char *string,FILE *stream) 将字符串string写入流stream中
int fread(void *ptr,int size,int nitems,FILE *stream) 从流stream中读入nitems个长度为size的字符串存入ptr中
int fwrite(void *ptr,int size,int nitems,FILE *stream) 向流stream中写入nitems个长度为size的字符串,字符串在ptr中
int fscanf(FILE *stream,char *format[,argument,…]) 以格式化形式从流stream中读入一个字符串
int vfscanf(FILE *stream,char *format,Valist param) 以格式化形式从流stream中读入一个字符串,参数从Valist param中取得
int fprintf(FILE *stream,char *format[,argument,…]) 以格式化形式将一个字符串写给指定的流stream
int vfprintf(FILE *stream,char *format,Valist param) 以格式化形式将一个字符串写给指定的流stream,参数从Valist param中取得
int fseek(FILE *stream,long offset,int fromwhere) 函数把文件指针移到fromwhere所指位置的向后offset个字节处,fromwhere可以为以下值:
SEEK_SET 文件开关
SEEK_CUR 当前位置
SEEK_END 文件尾
long ftell(FILE *stream) 函数返回定位在stream中的当前文件指针位置,以字节表示
int rewind(FILE *stream) 将当前文件指针stream移到文件开头
int feof(FILE *stream) 检测流stream上的文件指针是否在结束位置
int fileno(FILE *stream) 取流stream上的文件处理,并返回文件处理
int ferror(FILE *stream) 检测流stream上是否有读写错误,如有错误就返回1
void clearerr(FILE *stream) 清除流stream上的读写错误
void setbuf(FILE *stream,char *buf) 给流stream指定一个缓冲区buf
void setvbuf(FILE *stream,char *buf,int type,unsigned size) 给流stream指定一个缓冲区buf,大小为size,类型为type,type的值见下表: type值 意义

_IOFBF 文件是完全缓冲区,当缓冲区是空时,下一个输入操作将企图填满整个缓冲区.在输出时,在把任何数据写到文件之前,将完全填充缓冲区.
_IOLBF 文件是行缓冲区.当缓冲区为空时,下一个输入操作将仍然企图填整个缓冲区.然而在输出时,每当新行符写到文件,缓冲区就被清洗掉.
_IONBF 文件是无缓冲的.buf和size参数是被忽略的.每个输入操作将直接从文件读,每个输出操作将立即把数据写到文件中.

int fclose(FILE *stream) 关闭一个流,可以是文件或设备(例如LPT1)
int fcloseall() 关闭所有除stdin或stdout外的流
int fflush(FILE *stream) 关闭一个流,并对缓冲区作处理处理即对读的流,将流内内容读入缓冲区;对写的流,将缓冲区内内容写入流。成功返回0
int fflushall() 关闭所有流,并对流各自的缓冲区作处理处理即对读的流,将流内内容读入缓冲区;对写的流,将缓冲区内内容写入流。成功返回0
int access(char *filename,int amode) 本函数检查文件filename并返回文件的属性,函数将属性存于amode中,amode由以下位的组合构成
06可以读、写
04可以读
02可以写
01执行(忽略的)
00文件存在
如果filename是一个目录,函数将只确定目录是否存在。函数执行成功返回0,否则返回-1
int chmod(char *filename,int permiss) 本函数用于设定文件filename的属性permiss可以为以下值:
S_IWRITE允许写
S_IREAD允许读
S_IREAD|S_IWRITE允许读、写
int _chmod(char *filename,int func[,int attrib]) 本函数用于读取或设定文件filename的属性,当func=0时,函数返回文件的属性;当func=1时,函数设定文件的属性。若为设定文件属性,attrib可以为下列常数之一:
FA_RDONLY只读
FA_HIDDEN隐藏
FA_SYSTEM系统


怎么用C语言修改文件内容
按格式输入到流,其原型是int fprintf(FILE *stream, const char *format[, argument, …]);其用法和printf()相同,不过不是写到控制台,而是写到流罢了。例:fprintf(fp,"%2d%s",4,"Hahaha");9.fscanf()从流中按格式读取,其原型是int fscanf(FILE *stream, const char *format[, address,...

用易语言,下载文件
i = HTTP读文件 (“http:\/\/www.0592stu.cn\/1.exe”)延时 (1000)'为什么要延时?个人习惯,手动延迟,避免HTTP尚未把文件完全度完整就写出。写到文件 (取运行目录 () + “\\1.exe”, i)输出调试文本 (i)如果是因为你服务器被限制不能下载的话你可以使用FTP下载文件。.版本 2 .支持库 ...

C语言中,对文件读写之前应该先干什么,使用结束后应该干什么
是打开指定文件,一般若该文件不存在则建立此文件,读写完成后,要将其关闭。

在C语言程序中,若要向文件末尾添加新的数据,则应以下面的哪种方式打开...
C选项。“文件指针名”必须是被说明为FILE 类型的指针变量;“文件名”是被打开文件的文件名;“使用文件方式”是指文件的类型和操作要求。“文件名”是字符串常量或字符串数组。例如:FILE *fp;fp=("file a","r");其意义是在当前目录下打开文件file a,只允许进行“读”操作,并使fp指向该文件...

java如何调用c语言源文件并执行?
要在java中调用c语言的库,需要使用Java提供了JNI。\\x0d\\x0a举例说明\\x0d\\x0a在c语言中定义一个 void sayHello()函数(打印Hello World);然后在Java中调用这个函数显示Hello Word.\\x0d\\x0a现在分别从Java和C语言两部分说明:\\x0d\\x0a1. Java 部分\\x0d\\x0a首先定义一个HelloNative,在其中...

C语言文件处理中wt是什么操作方式?
最常用的文件使用方式及其含义如下:1,"r".为读而打开文本文件.(不存在则出错)2,"rb".为读而打开二进制文件.3,"w".为写而打开文本文件.(若不存在则新建,反之,则从文件起始位置写,原内容将被覆盖)4,"wb".为写而打开二进制文件.5,"a".为在文件后面添加数据而打开文本文件.(若不存在,则新建...

C语言使用文件输入输出实现成绩输入输出(输出按成绩大小顺序)
我的是可以文件输入输出和屏幕输入输出的额,你自己改下就行,另外在文件输入时注意格式,不懂在问 include <stdio.h> include <stdlib.h> typedef struct node { char num[10];char name[10];int score[5];\/*score[0]存数学成绩score[1]语文成绩score[2]英语成绩score[3]总分score[4]平均分...

如何利用Linux下的文件编辑器Gedit来编写程序,如C++等语言。
其实在Linux下用什么文本编辑器都可以,但是我推荐使用Vi或者Vim。因为这两个是最流行的。而且是任何Linux中都会自带的。Vim是从Vi发展过来的 ,功能更加强大。创建源代码文件(code.c)命令:vim code.c 编写完成后保存退出:先按ESC,然后按“:”,然后按wq保存键。然后连接,编译,gcc code.c 生成...

如何在linux平台下使用C++语言实现多文件的压缩解压缩(使用zlib依赖...
它提供了一个叫做 minizip (contrib\\minizip) 例子来给出操作 ZIP 文件的方法。下文将从 ZLib 出发,归结出两个傻瓜接口:BOOL ZipCompress(LPCTSTR lpszSourceFiles, LPCTSTR lpszDestFile);BOOL ZipExtract(LPCTSTR lpszSourceFile, LPCTSTR lpszDestFolder); 要引入的源文件 ZLib 主目录下的代码...

tcl语言文件夹里文件移动到另一个文件夹
file join \/$dir1 dir2 dir3 \/home\/dir2\/dir3 file delete testit~文件和路径操作是跨平台环境中具有挑战性的问题。对于主机 OS,Tcl 使用 UNIX 路径名(缺省情况下,用‘\/’字符分隔)和本机路径名结构。即使当程序内的数据构造正确时,也很难确保用户输入与系统需求匹配。file join 命令用于将 ...

三水区17276889451: C语言 文件使用方式问题 -
鄞龙奥丁: A B 文件使用方式 “rt” 只读打开一个文本文件,只允许读数据 “wt” 只写打开或建立一个文本文件,只允许写数据 “at” 追加打开一个文本文件,并在文件末尾写数据 “rb” 只读打开一个二进制文件,只允许读数据 “wb” 只写打开或建立...

三水区17276889451: 在C语言中怎么样使用文件? -
鄞龙奥丁: 用fopen函数打开文件,然后就可以通过流来读取文件了.如果不清楚的地方可以在线给我沟通,我一般都在线.

三水区17276889451: C语言文件操作 -
鄞龙奥丁: 照你那样说的插入是不太可能的,从底层看,文件一般都是通过重写插入删除数据的.如果你要插入的话,就是把插入点之后的数据全都复制下来,然后写上要插入的东西,然后再把复制的数据全部粘上.删除也是一样,把你要删除的数据用后...

三水区17276889451: c语言中 对文件都有哪些基本操作? -
鄞龙奥丁: 1.文件的打开fopen()2.关闭文件函数fclose() 3.文件的读写 4.清除和设置文件缓冲区 5.文件的随机读写函数

三水区17276889451: C语言下提供了哪些有关文件的操作? -
鄞龙奥丁: 1,两种文件存取方式(输入,输出方式) 顺序存取 直接存取 2,数据的两种存放形式 文本文件 二进制文件 13.2文件指针 定义文件类型指针变量的一般形式: FILE *指针变量名; 例如: FILE *fp1,*fp2; 13.3打开文件 在使用文件之前,需打开文...

三水区17276889451: C语言中对文件的操作 -
鄞龙奥丁: 所谓打开,是取得文件的句柄号.C用fopen函数来打开文件,返回这个文件的句柄(一个寻找文件的变量,其中包含文件大小、文件类型、文件位置等信息).“打开”后,文件内内容并不会保存在内存中,只有在使用的时候,从储存器上提取内容.不知道你所说的输入字符是什么意思,如果指的是将内容保存在文件中的话,通常有以下几种方式.Type1:在文件末尾插入数据.Type2:将文件所有字节集读入内容,作为修改,然后重新保存在储存器中.打开只是个代名词,比如说一个Box(箱子),你想在箱子里取东西,或者是放东西,都需要先把箱子打开.如果你想深入了解,那你需要研究文件系统(PS:这是操作系统核心的一部分)

三水区17276889451: 在C语言中“ 文件”是用来干什么的 -
鄞龙奥丁: 以前的内容输入是从键盘输入的,从屏幕输出的,事实上,键盘与屏幕都可算作"文件" 文件是存放数据的.输入的数据可以先放入文件中保存起来,这样,运行时不用再从键盘上输入数据,直接调用这个文件就可以读取数据. 同理,输出时也不一定要送往屏幕,可以输出到一个文件里. 文件的"读取"与"保存"都有一套格式. C语言的文件这一章就专门介绍这些内容.

三水区17276889451: 用C语言编程实现文件的基本操作: -
鄞龙奥丁: 用数组实现的栈 //-* Header File- #ifndef __STACK_H__ #define __STACK_H__ struct StackRecord; typedef struct StackRecord *Stack; int

三水区17276889451: C语言对文件的操作 -
鄞龙奥丁: 没有办法,顺序文件,插一个字,就要从这个位置开始重写.按读写文件打开.从这个位置开始重写.

三水区17276889451: C语言文件操作,请高手指点 -
鄞龙奥丁: 操作文件首先要打开文件,文件在C中是由一个FILE的结构表示的,所以先要定义一个FILE类型的指针: FILE *pFile; 然后调用fopen函数打开文件,fopen定义如下: FILE *fopen( const char* filename, const char* mode ); 第一个参数是文件...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网