1樓:匿名使用者
通過使用下面的幾個函式,fopen,fprintf,fscanf,fseek,ftell 。具體的函式函式原型如下所示:
file*fopen(const char*filename,const char *mode);
int fprintf(file*stream,const char *format,...)
int fscanf(file* stream,const char *format,...)
int fseek(file*stream,long offset,int origin)
long ftell(file* stream)
首先,資料寫入到檔案中的是追加的形式。具體的寫入**如下所示:
主要寫入時要指定每個資料的寬度,若不指定,當修改某行的資料,修改後的長度大於修改前得長度,將影響檔案中的下一行。制定寬度之後,只要修改後的長度不大於制定的寬度,都不影響下面的內容。(這是注意點)
file *fp=fopen("clientinfo.txt","ar+");
clientinfo info;
。。。。/*完成對info結構體的賦值*/
fprintf(fp,"%10s %10s %10d %10s %10s %10s %10d %10d",info.id,info.nickname,\
info.online,info.pwd,info.encryp,info.ip,info.port,info.fd);
fprintf(fp,"\n");
fclose(fp);
修改處的**如下所示,整個**是在mfc中實現的:
file *fp=fopen("clientinfo.txt","r+");
clientinfo info;
long nline=0,n;
int oldline=0;/*記錄匹配位置的前一行的偏移量*/
cstring str;
while((n=fscanf(fp,"%s %s %d %s %s %s %d %d",info.id,info.nickname,\
str.format("%d",nline);
messagebox(str);
if(strncmp(info.id,id,id.getlength())==0)/*查詢要修改的位置*/
oldline=nline;
break;
nline=ftell(fp);
fseek(fp,oldline,seek_set);/*定位到要修改的位置,注意,這個位置是上一次讀的最後,故寫的時候要先寫換行,第一行除外*/
if(oldline!=0)
fprintf(fp,"\n");
fprintf(fp,"%10s %10s %10d %10s %10s %10s %10d %10d",info.id,info.nickname,\
info.online,info.pwd,info.encryp,info.ip,info.port,info.fd);
fprintf(fp,"\n");
fclose(fp);
下面是修改後的資料,修改第二行,沒有影響前後的資料。
2樓:匿名使用者
#include
#include
#define n 512 //一行中最大字元數int main()
//生成新檔名並開啟臨時新檔案
tmpname = tmpnam(tmpname);
fpnew = fopen(tmpname, "w");
if (fpnew == null)
//第一行
fgets(buf, n, fpori);
fputs(buf, fpnew);
//第二行
fgets(buf, n, fpori);
fprintf(fpnew, "good morning;\n");
//第三行
fgets(buf, n, fpori);
fputs(buf, fpnew);
//關閉檔案
fclose(fpori);
fclose(fpnew);
remove(filename); //刪除原檔案rename(tmpname, filename); //重新命名新檔案
return 0;}
怎麼用c語言對檔案操作用特定內容替換其中某些內容
3樓:
由於作業系統對檔案操作做了封裝,本來很容易的事情變得很難了。
修改檔案最好的,最簡單的方法,是新建一個檔案,把修改部分前面的,先寫入新檔案,
然後寫入修改的部分,再把後一部分沒有修改的,寫到新檔案中去。然後檔案重新命名。
原檔案改名備份檔案,新檔案改名原檔案。
如果修改的資料很少n~100n kb,n~10n mb 可以用緩衝區處理好修改,再寫入檔案。
file×
fopen
fseek
fwrite
fclose
ps:1)如果修改的內容,和原檔案被修改的資料,位元組數完全相同,直接找到要修改的地方,寫入新內容就可以了。
2)如果修改後的內容,和原檔案被修改的資料,位元組數不同,建議新建一個檔案,否則很麻煩,要用讀寫方式開啟。
a) 如果修改後資料增加,把修改資料後的所有資料向後移動,給修改的資料騰地方。
b) 如果減少,要把所有資料前移,然後修改檔案長度。
4樓:自我程式設計
如果只想修改檔案一部分。
可以使用函式int fseek( file *stream, long offset, int origin );來定位你的檔案指標。
檔案指標的位置決定你讀寫檔案的起始位置。
其中引數origin :表示從**開始偏移,值有:
seek_set: 檔案開頭
seek_cur: 當前位置
seek_end: 檔案結尾
引數offset:表示偏移的位元組數,正數表示正向偏移,負數表示負向偏移。
比如你先讀取檔案內容,同時做判斷,找到你要改的內容時,呼叫函式
fseek(fp,10l,seek_cur);把檔案指標移動到離當前指標位置10個位元組的地方(我們假設當前位置偏移10個位元組就是你要修改的起始位置);
這樣你之後的讀寫都是從這個位置開始。
不過要注意的是,你從這位置開始寫新的內容,可以覆蓋原內容,所以如果新的內容比你想覆蓋的內容長的話,會把後面你想保留的內容也覆蓋掉。
這種思路,你想要實現修改指定內容,還需要把修改內容之後的資料也讀出來備份,再一起寫進去。
所以最簡單,還是直接生成新的檔案替換原檔案。
5樓:匿名使用者
讀入檔案到緩衝區,修改緩衝區內容,然後將緩衝區的內容重新寫入到檔案
關於c語言中檔案修改的操作!
6樓:樂跑小子
使用檔案操作函式fopen即可建立檔案,使用檔案操作函式fprintf即可修改檔案內容。
1、c語言標準庫提供了一系列檔案操作函式。檔案操作函式一般以f+單詞的形式來命名(f是file的簡寫),其宣告位於stdio.h標頭檔案當中。
例如:fopen、fclose函式用於檔案開啟與關閉;fscanf、fgets函式用於檔案讀取;fprintf、fputs函式用於檔案寫入;ftell、fseek函式用於檔案操作位置的獲取與設定。
2、例程:
#include
int i,a[100];
int main()
for(i=0;fscanf(fp1,"%d",a+i)!=eof;i++);//從輸入檔案連續讀取整數到陣列a
for(;i--;)fscanf(fp2,"%d ",a[i]);//把陣列a逆序寫入到輸出檔案當中
fclose(fp1);//關閉輸入檔案
fclose(fp2);//關閉輸出檔案,相當於儲存
return 0;}
7樓:厚如雲
#include
#include
using namespace std;
class book
;//book類的定義
void book::input()
void book::modifynum()void book::show()
void main()
8樓:
沒什麼思路,好像是隻能不追加,重寫一遍!
9樓:匿名使用者
使用r+開啟,具有寫許可權,原來的資料還在,寫入時才會覆蓋,沒覆蓋的也不變
如果用w,w+等,都會銷燬原來的資料,從新寫入比如已有檔案中資料abcde
用r+開啟在開頭寫入字母z之後,檔案內容變為zbcde如果帶w的方式,就只剩z了
C語言的檔案訪問,C語言檔案操作
先定義乙個檔案指標 file fp 然後給它賦值 fp fopen 要訪問的檔名,r 然後就可以從檔案中讀取資料了。其中檔名要以字串的形式出現,比如我要開啟c盤根目錄下的,就要寫成。fp fopen c 路徑中的所有的 都要用轉義字元 替換掉,否則的話c的編譯器會把 後面的乙個字元當成轉義字元的引數...
c 程式設計檔案操作問題
c 程式設計問題 檔案的相關操作 20 標籤 c 程式設計,c 檔案 2 編寫乙個程式,實現以下功能 1 輸入一系列的資料 學號 姓名 成績 存放在檔案stud.dat中 2 從該檔案中讀出這些資料並顯示出來。2 實驗目的和要求 1 掌握磁碟檔案的操作 2 使用write函式完成將記憶體中的一塊東西...
WIN7怎麼替換資料夾
說明目標路徑下已經有了一個 新建資料夾 了,點 是 的話就會覆蓋目標新建資料夾,否 就取消複製了 如果2個資料夾裡面的檔案都不是一樣的話,就點 是 這樣2個資料夾就會合併成1個資料夾了 裡面含有2個資料夾裡的所有檔案 如果2個資料夾還有相同檔案的話,如果直接點 是 會出現舊檔案覆蓋新檔案的情況,所以...