C语言文件操作 fopen, fclose, mkdir详解

1.建文件夹

int _mkdir(const char *path,mode_t mode);
函数名: _mkdir
功 能: 建立一个目录
用 法: int _mkdir( const char *dirname );
头文件库:direct.h
返回值:创建一个目录,若成功则返回0,否则返回-1

=====================================================

2.打开文件fopen()

函数功能: 打开一个文件
函数原型:FILE * fopen(const char * path,const char * mode);
所需库: <stdio.h>
返回值: 文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。

一般而言,打开文件后会作一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以一般在fopen()后作错误判断及处理。

if((fin = fopen(“a.txt”,”r”)) == NULL)
printf(“Open file error.\n”);

参数说明:
参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。
mode有下列几种形态字符串:  (常用的就前几个,后面用到了再查,不用记)
r 以只读方式打开文件,该文件必须存在。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)

rb 为输入打开一个二进制文件。
wb 只写打开或新建一个二进制文件;只允许写数据。
ab 向二进制文件尾添加数据

r+ 以可读写方式打开文件,该文件必须存在。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)

rb+ 读写打开一个二进制文件,只允许读数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。

rt+ 读写打开一个文本文件,允许读和写。
wt+ 读写打开或着建立一个文本文件;允许读写。
at+ 读写打开一个文本文件,允许读或在文本末追加数据。
上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。
不过在POSIX系统,包含Linux都会忽略该字符。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask 值。
有些C编译系统可能不完全提供所有这些功能,有的C版本不用”r+”,”w+”,”a+”,而用”rw”,”wr”,”ar”等,读者注意所用系统的规定。

==========================================================

3.关闭文件 fclose()

在使用完一个文件后应该关闭它,以防止它再误用,关闭就是指文件指针变量不指向该文件,也就是文件指针变量与文件脱钩,此后不能再通过该指针对原来与其相联系的文件进行读写操作。除非再次打开,使该指针变量重新指向该文件。

用 fclose 函数关闭文件,fclose 函数调用的一般形式为

fclose(文件指针);

例如:

fclose(fp);

应该养成在程序终止之前关闭所有文件的习惯,如果不关闭文件将丢失数据。因为如前所述,在向文件写数据时,是先将数据输到缓冲区,待缓冲区充满后才正式输出给文件,如果当数据未充满缓冲区,而程序结束运行,就会将缓冲区中的数据丢失,用 fclose 函数关闭文件,可以避免这个问题,它先把缓冲区中的数据输出到磁盘文件,然后才释放文件指针变量。

fclose 函数也带回一个值,当顺利地执行了关闭操作,则返回值为 0 ,否则返回 EOF (-1) 。可以用 ferror 函数来测试。
==============================================================
下面用一个程序来说明上面几个函数用法:

将a.txt拷贝到/test目录下,名字也为a.txt

C++

/**
 * Author: Gneveek
 * Data: 2011-10-6
 * Descripition: Clock Chen's Homework : File operation #1
 * 一、将a.txt拷贝到/test目录下,名字也为a.txt
 */
#include <stdio.h>
#include <direct.h> //用 _mkdir()创建一个文件夹(目录)
int main()
{
 _mkdir("test");

 char c;
 FILE *fin, *fout;
 if((fin = fopen("a.txt","r")) == NULL)
 printf("I'm so sorry,Open file error.\n");
 if((fout = fopen("test\\a.txt","w")) == NULL) //以 w 方式,只能用于往文件中写,如果不存在,则以指定的文件名新建一个文件
 printf("I'm so sorry,Open file error.\n");

 while((c = fgetc(fin)) != EOF)
 fputc(c,fout); 

 fclose(fin);
 fclose(fout);
 return 0;
}

================================================================

4.判断文件是否存在和是否可读可写

int access(const char *pathname,int mode);

pathname:是文件名称
mode是我们要判断的属性.可以取以下值或者是他们的组合:
R_OK文件可以读
W_OK文件可以写
X_OK文件可以执行
F_OK文件存在.

当我们测试成功时,函数返回0,否则如果有一个条件不符时,返回-1.

用一个程序实例来认识这个函数:

输入一个文件名(在命令行中输入),判断该文件是否存在,并且可读,不存在提示不存在,不可读提示不可读,如果存在并可读,则在当前目录下,创建一个目录test,并将该文件拷贝到test中

C++

/**
 * Author: Gneveek
 * Data: 2011-10-6
 * Descripition: Clock Chen's Homework : File operation #2
 *二、输入一个文件名(在命令行中输入),判断该文件是否存在,并且可读,
 *不存在提示不存在,不可读提示不可读,如果存在并可读,
 *则在当前目录下,创建一个目录test,并将该文件拷贝到test中
 */
#include <stdio.h>
#include <io.h>
#include <direct.h>
#include <string.h>

int main()
{
 FILE *fin, *fout;
 char filename[256];
 char pathname[256] = "test\\";
 scanf("%s",filename);
 if(access(filename,F_OK) == -1) //判断存在与否
 printf("This file does not exist!\n");
 else if(access(filename,R_OK) == -1) //如果存在,判断可读否
 printf("Cann't Read!\n");
 else               //到这里,说明即存在又可读
 {
 char c;
 _mkdir("test"); 

 strcat(pathname,filename);  

 fin = fopen(filename,"r");
 fout = fopen(pathname,"w");

 while((c = fgetc(fin)) != EOF)
  fputc(c,fout);
 }
 return 0;
}
(0)

相关推荐

  • C语言 文件操作解析详解及实例代码

    C语言文件操作解析 在文件操作中除了打开操作以及读写操作,还有几种比较常见的操作.下面介绍一下这些操作中涉及到的函数. 一.移动位置指针的函数 rewind函数和fseek函数,这两个函数的原型是: void rewind(FILE *fp);     将位置指针移动到文件首 int fseek(FILE *fp,long int offset,int origin);   将位置指针移动到距离origin的offset字节数的位置 其中对于fseek函数中的参数,origin为起始点,offs

  • C语言文件操作中 fgets与fputs 函数详解

    C语言文件操作中 fgets.fputs 函数详解 先给出api fgets 语法: #include <stdio.h> char *fgets( char *str, int num, FILE *stream ); 函数fgets()从给出的文件流中读取[num - 1]个字符并且把它们转储到str(字符串)中. fgets()在到达行末时停止,在这种情况下,str(字符串)将会被一个新行符结束. 如果fgets()达到[num - 1]个字符或者遇到EOF, str(字符串)将会以nu

  • C语言文件操作函数大全(超详细)

    fopen(打开文件)相关函数 open,fclose表头文件 #include<stdio.h>定义函数 FILE * fopen(const char * path,const char * mode);函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态.mode有下列几种形态字符串:r 打开只读文件,该文件必须存在.r+ 打开可读写的文件,该文件必须存在.w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失.若文件不存在则建立该文件.w

  • c语言文件读写示例(c语言文件操作)

    方法: 复制代码 代码如下: long filesize(char* filename);char* file_get_contents(char* filename);void file_put_contents(char* filename, char* data); 示例: 复制代码 代码如下: #include <stdio.h>#include <stdlib.h>#include <string.h>long filesize(char* filename)

  • C语言文件操作函数freopen详细解析

    今天做USACO  用到了文件的操作. 之前做USACO只是格式化的些 写  freopen("xxx.in","r",stdin)  和"freopen("xxx.out","w",stdout)" 百度百科上是这么介绍的: 函数名: freopen 功 能: 替换一个流,或者说重新分配文件指针,实现重定向.如果stream流已经打开,则先关闭该流.如果该流已经定向,则freopen将会清除该定向.此函数

  • c语言程序设计文件操作方法示例(CreateFile和fopen)

    实例: (1)第一种方法CreateFile 复制代码 代码如下: #include "stdafx.h"#include <windows.h>void main(int argc, char* argv[]){      HANDLE hDevice = CreateFile("C://S.txt",            GENERIC_READ|GENERIC_WRITE,            0,            NULL,      

  • C语言文件操作 fopen, fclose, mkdir详解

    1.建文件夹 int _mkdir(const char *path,mode_t mode); 函数名: _mkdir 功 能: 建立一个目录 用 法: int _mkdir( const char *dirname ); 头文件库:direct.h 返回值:创建一个目录,若成功则返回0,否则返回-1 ===================================================== 2.打开文件fopen() 函数功能: 打开一个文件 函数原型:FILE * fope

  • C语言文件操作之fread函数详解

    目录 前言 一.fread 函数 二.缓冲区受限的情况 ( 循环读取文件 | feof 函数判定文件读取完毕 ) 三.处理乱码问题 四.记录读取的字节个数 五.读取到 0 字节的情况 六.读取完毕的情况 七.读取文本文件 “\n” 与 读取二进制文件 “\r\n” 区别 总结 前言 二进制文件读写两个重要的函数 , fread 和 fwrite , fread 用于读取文件 , fwrite 用于写出文件 ; fread / fwrite 函数 既可以操作 二进制文件 , 又可以操作 文本文件

  • Python高级文件操作之shutil库详解

    前言 什么算是高层的文件操作呢? 普通的文件操作,我们一般只涉及创建文件,文件夹以及写入文件等等.假如我现在需要复制一个文件的内容到另一个文件之中,用pathlib等都只能先打开复制文件,然后进行将其读出来保存,然后再写入新的文件,这种普通的复制操作,无形之中增加了许多步骤. 而shutil库可以直接完成复制符间的操作,同时还支持归档.本篇,将详细介绍文件的高层次操作. 一.copyfile() copyfile()函数用于将一个文件的内容复制到另一个文件之中,准备的来说,它不是copy内容,而

  • Python文件操作函数用法实例详解

    这篇文章主要介绍了Python文件操作函数用法实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 字符编码 二进制和字符之间的转换过程 --> 字符编码 ascii,gbk,shit,fuck 每个国家都有自己的编码方式 美国电脑内存中的编码方式为ascii ; 中国电脑内存中的编码方式为gbk , 美国电脑无法识别中国电脑写的程序 , 中国电脑无法识别美国电脑写的程序 现在硬盘中躺着 ascii/gbk/shit/fuck 编码的文件,

  • 易语言数据库操作之“取字段名”命令详解

    返回当前数据库中指定字段的名称.如果指定字段不存在,将返回空文本. 语法: 文本型 取字段名 (字段名称或位置) 参数名 描 述 字段名称或位置 必需的:通用型.参数值可以为一个字段名称文本或者一个字段位置数值,字段位置数值从 1 开始. 例程: 说明: 首先使用"取字段数()"命令取出数据库中的字段数,并规定循环的次数为该字段数,然后在记次循环中使用"取字段名()"命令将每个字段的字段名依次取出,并显示在列表框中. 到此这篇关于易语言数据库操作之"取字段

  • Python基础之文件操作及光标移动详解

    目录 一.文件操作 1.文件的概念 2.代码打开文件的方式 二.文件读写模式 1.'r' 只读模式 read 2.'w' 只写模式 write 3.'a' 尾部追写模式 add 三.文件操作模式 1.t 文本模式 2.b 二进制模式 四.文件诸多方法 1.read() 2.for循环 3.line 4.readable 5.write 6.flush 五.文件内光标的移动 1.seek() 2.tell() 一.文件操作 1.文件的概念 1.文件就是计算机暴露给用户操作硬盘的快捷方式 2.计算机

  • C语言 文件的打开与关闭详解及示例代码

    在C语言中,文件操作都是由库函数来完成的,这节介绍文件的打开和关闭. 文件的打开(fopen函数) fopen() 函数用来打开一个文件,它的原型为: FILE *fopen(char *filename, char *mode); filename为文件名(包括文件路径),mode为打开方式,它们都是字符串.fopen() 会获取文件信息,包括文件名.文件状态.当前读写位置等,并将这些信息保存到一个FILE类型的结构体变量中,然后将该变量的地址返回. FILE是在stdio.h头文件中定义的一

  • 一天一个shell命令 linux文件操作系列-ln命令详解

    里提示一下:ubuntu的翻译很多都是字面直译,存在很多问题,所以建议大家参照我这里的解释.当然本来也是有些赶文的嫌疑,望指正. 经常在linux上操作,有在不同的目录下切换某几个固定的命令,或者修改几个固定的文件,这时候,如果能在一个目录下就操作他们,会是一件多么轻松的事情.我们来看看链接命令ln 全称 ln 全称是link 顾名思义,这是一个建立一个链接.怎么去理解呢?它的功能类似于Mac OS的别名或者Windows的快捷方式, 删除不会影响文件本身. 说明:(直接看看斜体,就行了) 链接

  • C语言中操作字符串的函数详解

    目录 一.函数表 二.strlen 实例 三.strcmp 实例 四.strcpy 实例 五.stract 实例 六.strchr 实例 总结 一.函数表 函数名 函数 功能 strlen size_t strlen(const char* s); 返回字符串 s 的长度(不包括结尾的0) strcmp int strcmp(const char* s1, const char* s2); 比较两个字符串,返回:如果 s1 == s2,返回 0:如果 s1<s2 则返回小于 0 (如 -1):如

  • 易语言数据库操作之“改字段名”命令详解

    修改当前数据库中指定字段的名称.本命令只有当数据库的共享打开方式为"#禁止读写"时才有效.成功返回真,失败返回假. 语法: 逻辑型 改字段名 (字段名称或位置,字段的新名称) 参数名 描 述 字段名称或位置 必需的:通用型.参数值可以为一个字段名称文本或者一个字段位置数值,字段位置数值从 1 开始. 字段的新名称 必需的:文本型. 例程: 说明: 启动窗口创建完毕后,将数据库中所有字段名显示在"字段名列表框"中,当列表框中的项目被双击后,弹出输入框,输入框中输入的内

随机推荐