程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C說話文件操作 fopen, fclose, mkdir詳解

C說話文件操作 fopen, fclose, mkdir詳解

編輯:關於C++

C說話文件操作 fopen, fclose, mkdir詳解。本站提示廣大學習愛好者:(C說話文件操作 fopen, fclose, mkdir詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是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
 * 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
 *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;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved