C語言 文件操作解析詳解及實(shí)例代碼
C語言文件操作解析
在文件操作中除了打開操作以及讀寫操作,還有幾種比較常見的操作。下面介紹一下這些操作中涉及到的函數(shù)。
一.移動(dòng)位置指針的函數(shù)
rewind函數(shù)和fseek函數(shù),這兩個(gè)函數(shù)的原型是:
void rewind(FILE *fp); 將位置指針移動(dòng)到文件首
int fseek(FILE *fp,long int offset,int origin); 將位置指針移動(dòng)到距離origin的offset字節(jié)數(shù)的位置
其中對(duì)于fseek函數(shù)中的參數(shù),origin為起始點(diǎn),offset為距離origin的偏移字節(jié)數(shù)
origin的值有三個(gè):SEEK_SET(0)—>文件首,SEEK_CUR(1)—>當(dāng)前位置,SEEK_END(2)—>文件尾。
注意:1)若文件是以追加方式打開,則當(dāng)進(jìn)行寫操作時(shí),這兩個(gè)函數(shù)是不起作用的,無論將位置指針移動(dòng)哪個(gè)位置,始終將添加的數(shù)據(jù)追加到文件末尾。
二.其他常用函數(shù)
1.ftell函數(shù)
long int ftell(FILE *fp);
計(jì)算當(dāng)前位置指針距文件首的字節(jié)數(shù),若出錯(cuò),則返回-1L。
利用ftell函數(shù)可以計(jì)算出文件的大小。
2.feof函數(shù)
int feof(FILE *fp);
檢測(cè)當(dāng)前位置指針是否到達(dá)文件末尾,若到達(dá)文件末尾,則返回一個(gè)非零值,否則返回0。
3.ferror函數(shù)
int ferror(FILE *fp);
檢測(cè)文件操作過程中是否出錯(cuò),若出錯(cuò),則返回一個(gè)非零值,否則返回0
4.remove函數(shù)
int remove(const char *filename);
刪除文件,若刪除成功,則返回0,否則返回非零值
5.rename函數(shù)
int rename(const char *oldname,const char *newname);
將文件重命名,重命名成功則返回0,否則返回非零值。
6.freopen函數(shù)
FILE* freopen(const char *filename,const char *mode,FILE *stream);
實(shí)現(xiàn)重定向輸入輸出。此函數(shù)在測(cè)試數(shù)據(jù)時(shí)用得比較多。
7.fclose函數(shù)
int fclose(FILE *stream);
關(guān)閉一個(gè)流,若成功,則返回0,否則返回-1.注意每次對(duì)文件操作完之后需關(guān)閉流,否則可能會(huì)造成數(shù)據(jù)丟失。
測(cè)試程序:
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
freopen("input.txt","r",stdin);
freopen("output.txt","w+",stdout);
int i;
int a[10];
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<10;i++)
{
printf("%d\n",a[i]);
}
return 0;
}
假設(shè)工程目錄下已經(jīng)存在input.txt,文件中的數(shù)據(jù)為1 2 -1 3 4 5 7 8 9 10,則運(yùn)行之后,不需要從控制臺(tái)輸入數(shù)據(jù),程序直接從input.txt中讀取數(shù)據(jù),然后將結(jié)果輸出到output.txt中,不直接向控制臺(tái)輸出結(jié)果。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
使用代碼驗(yàn)證linux子進(jìn)程與父進(jìn)程的關(guān)系
Linux下父進(jìn)程可以使用fork 函數(shù)創(chuàng)建子進(jìn)程,但是當(dāng)父進(jìn)程先退出后,子進(jìn)程會(huì)不會(huì)也退出呢?通過下面這個(gè)小實(shí)驗(yàn),我們能夠很好的看出來2014-02-02
C語言實(shí)現(xiàn)二叉樹的搜索及相關(guān)算法示例
這篇文章主要介紹了C語言實(shí)現(xiàn)二叉樹的搜索及相關(guān)算法,結(jié)合具體實(shí)例形式分析了基于C語言創(chuàng)建、遍歷、搜索等相關(guān)算法與實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-06-06
C++17 使用 std::string_view避免字符串拷貝優(yōu)化程序性能
這篇文章主要介紹了C++17 使用 std::string_view避免字符串拷貝優(yōu)化程序性能,幫助大家提高程序運(yùn)行速度,感興趣的朋友可以了解下2020-10-10
C++實(shí)現(xiàn)簡(jiǎn)單學(xué)生管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡(jiǎn)單學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
Qt+OpenCV利用幀差法實(shí)現(xiàn)車輛識(shí)別
所謂幀差法也就是對(duì)連續(xù)圖像幀做差分運(yùn)算,其結(jié)果與定義好的閾值比較,若大于閾值則為運(yùn)動(dòng)目標(biāo)值為1,否則值為0?。本文將利用幀差法實(shí)現(xiàn)車輛識(shí)別,感興趣的可以了解一下2022-08-08
C語言基于EasyX庫實(shí)現(xiàn)有圖形界面鐘表
這篇文章主要介紹了C語言基于EasyX庫實(shí)現(xiàn)有圖形界面鐘表,直線轉(zhuǎn)動(dòng)端點(diǎn)計(jì)算,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
C實(shí)現(xiàn)的非阻塞方式命令行端口掃描器源碼
這篇文章主要介紹了C實(shí)現(xiàn)的非阻塞方式命令行端口掃描器源碼,對(duì)于大家理解C端口掃描器有很大幫主,需要的朋友可以參考下2014-07-07
C語言使用DP動(dòng)態(tài)規(guī)劃思想解最大K乘積與乘積最大問題
Dynamic Programming動(dòng)態(tài)規(guī)劃方法采用最優(yōu)原則來建立用于計(jì)算最優(yōu)解的遞歸式,并且考察每個(gè)最優(yōu)決策序列中是否包含一個(gè)最優(yōu)子序列,這里我們就來展示C語言使用DP動(dòng)態(tài)規(guī)劃思想解最大K乘積與乘積最大問題2016-06-06

