99偷拍视频精品区一区二,口述久久久久久久久久久久,国产精品夫妇激情啪发布,成人永久免费网站在线观看,国产精品高清免费在线,青青草在线观看视频观看,久久久久久国产一区,天天婷婷久久18禁,日韩动漫av在线播放直播

c語言文件解析函數ini c語言文件處理函數

C語言 INI文件內數據讀取方法

ini文件和普通txt文件相同,都是文本格式,使用普通文本操作函數讀取即可。

創新互聯專業為企業提供祥云網站建設、祥云做網站、祥云網站設計、祥云網站制作等企業網站建設、網頁設計與制作、祥云企業網站模板建站服務,十余年祥云做網站經驗,不只是建網站,更提供有價值的思路和整體網絡服務。

1、C語言標準庫提供了一系列文件操作函數。文件操作函數一般以f+單詞的形式來命名(f是file的簡寫),其聲明位于stdio.h頭文件當中。例如:fopen、fclose函數用于文件打開與關閉;fscanf、fgets函數用于文件讀取;fprintf、fputs函數用于文件寫入;ftell、fseek函數用于文件操作位置的獲取與設置。一般的C語言教程都有文件操作一章,可以找本教材進一步學習。

2、例程:

#includestdio.h

int?a;

char?b,c[100];

int?main(){

FILE?*?fp1?=?fopen("input.ini",?"r");//打開輸入文件input.ini

FILE?*?fp2?=?fopen("output.txt",?"w");//打開輸出文件

if?(fp1==NULL?||?fp2==NULL)?{//若打開文件失敗則退出

puts("不能打開文件!");

rturn?0;

}

fscanf(fp1,"%d",a);//從輸入文件讀取一個整數

b=fgetc(fp1);//從輸入文件讀取一個字符

fgets(c,100,fp1);//從輸入文件讀取一行字符串

printf("%ld",ftell(fp1));//輸出fp1指針當前位置相對于文件首的偏移字節數

fputs(c,fp2);//向輸出文件寫入一行字符串

fputc(b,fp2);//向輸出文件寫入一個字符

fprintf(fp2,"%d",a);//向輸出文件寫入一個整數

fclose(fp1);//關閉輸入文件

fclose(fp2);//關閉輸出文件,相當于保存

return?0;

}

C語言源程序文件的后綴是什么?

C語言源程序文件的后綴解決如下:

c 是c語言的源程序,.cpp是c++語言的源程序。

在Windows操作系統下,C語言源程序后綴為.c 、編譯后的后綴為 .obj 或 .o 、連接后生成的可執行文件的后綴為.exe。

告訴你們一個手機降溫的辦法:

紙巾用水浸濕后不斷擦拭手機后蓋,注意水不能擦太多,薄薄擦一點就好了,關鍵是要后蓋上的水快速蒸發。待后蓋上的水珠蒸發干后,又重復擦拭,一直重復至降溫完畢時。原理就是蒸發吸熱 。

手機發熱嚴重也有可能是系統很久沒有優化所致.打開手機管家,將手機優化即可.

手機里的軟件開的少,但是有些軟件可能是高耗電的程序.我們將這些程序關閉也可以起到降溫的效果.

請問C語言對文件的讀取有哪些函數,都有什么功能?像fseek();fscanf();fread......什么的

C語言文件操作函數

13.1C語言文件

1,兩種文件存取方式(輸入,輸出方式)

順序存取

直接存取

2,數據的兩種存放形式

文本文件

二進制文件

13.2文件指針

定義文件類型指針變量的一般形式:

FILE *指針變量名;

例如:

FILE *fp1,*fp2;

13.3打開文件

在使用文件之前,需打開文件.在C里使用fopen函數打開文件.格式為:

fopen(文件名,文件使用方式);

此函數返回一個指向FILE類型的指針.如:

FILE *fp;

fp=fopen("file_1","r");

如果調用成功,fp就指向file_1,否則返回為NULL,所以為了保證文件的正確使用,要進行測試.采用如下語句:

If((fp=fopen("file_1","r"))==NULL)

{

printf("Cannot open this file\n");

exit(0);

}

最常用的文件使用方式及其含義如下:

1,"r".為讀而打開文本文件.(不存在則出錯)

2,"rb".為讀而打開二進制文件.

3,"w".為寫而打開文本文件.(若不存在則新建,反之,則從文件起始位置寫,原內容將被覆蓋)

4,"wb".為寫而打開二進制文件.

5,"a".為在文件后面添加數據而打開文本文件.(若不存在,則新建;反之,在原文件后追加)

6,"ab".為在文件后面添加數據而打開一個二進制文件.

最常用的文件使用方式及其含義如下:

7,"r+".為讀和寫而打開文本文件.(讀時,從頭開始;在寫數據時,新數據只覆蓋所占的空間,其后不變)

8,"rb+".為讀和寫而打開二進制文件.只是在隨后的讀寫時,可以由位置函數設置讀和寫的起始位置.

9,"w+".首先建立一個新文件,進行寫操作,隨后可以從頭開始讀.(若文件存在,原內容將全部消失)

10,"wb+".功能與"w+"同.只是在隨后的讀寫時,可以由位置函數設置讀和寫的起始位置.

最常用的文件使用方式及其含義如下:

11,"a+".功能與"a"相同;只是在文件尾部添加新的數據后,可以從頭開始讀.

12,"ab+".功能與"a+"相同;只是在文件尾部添加新數據之后,可以由位置函數設置開始讀的起始位置.

13.4關閉文件

當文件的讀寫操作完成之后,使用fclose函數關閉文件.格式如下:

fclose(文件指針)

如:fclose(fp);

13.5調用getc(fgetc)和putc(fputc)函數進行輸入和輸出

1,調用putc(或fputc)函數輸出一個字符

調用形式為:

putc(ch,fp);

功能是:將字符ch寫到文件指針fp所指的文件中去.當輸出成功,putc函數返回所輸出的字符;否則,返回一個EOF值.EOF是在stdio.h庫函數文件中定義的符號常量,其值等于-1.

13.5調用getc(fgetc)和putc(fputc)函數進行輸入和輸出

例如:把從鍵盤輸入的文本按原樣輸出到名為file_1.dat文件中,用字符@作為鍵盤輸入結束標志.

#include

Void main()

{

FILE *fpout;

char ch;

if(fpout=fpopen("file_1","w")==NULL)

{

printf("Cannot open this file!\n");

exit(0);

}

ch=getchar();

while(ch!='@')

{ fputc(ch,fpout); ch=getchar(); }

fclose(fpout);

}

2.調用getc(或fgetc)函數輸入一個字符

調用形式為:

ch=getc(pf);

功能是:從pf指定的文件中讀如一個字符,并把它作為函數值返回.

例如:把一個已存在磁盤上的file_1.dat文本文件中的內容,原樣輸出到終端屏幕上.

#include

void main(){

FILE *fpin;

char ch;

if((fpin=fopen("file_1.dat","r"))==NULL)

{ printf("Cann't open this file!\n");exit(0);}

ch=fgetc(fpin);

while (ch!=EOF)

{ putchar(ch); ch=fgetc(fpin);}

fclose(fpin);

}

13.6判斷文件結束函數feof

EOF可以作為文本文件的結束 標志,但不能作為二進制文件的結束符.feof函數既可以判斷二進制文件,又可以判斷文本文件.

例:編寫程序,用于把一個文本文件(源)復制到另一個文件(目的)中,源文件名和目的文件名由命令行輸入.命令形式如下:

可執行程序名 源文件名 目的文件名

#include

void filecopy(FILE* ,FILE *);

void main(int argc,char *argv[]){

FILE *fpin,*fpout;

if(argc==3)

{ fpin=fopen(argv[1],"r");

fpout=fopen(argv[2],"w");

filecopy(fpin,fpout);

fclose(fpin);fclose(fpout);

}

else if(argc3)

printf("The file names too many!!\n";

else

printf("There are no file names for input or output!!\n );

}

void filecopy(FILE *fpin,FILE *fpout)

{

char ch;

ch=getc(fpin);

while(!feof(fpin))

{putc(ch,fpout); ch=getc(fpin);}

}

13.7fscanf函數和fprintf函數

1,fscanf函數

fscanf只能從文本文件中按格式輸入,和scanf函數相似,只不過輸入的對象是磁盤上文本文件中的數據.調用形式為:

fscanf(文件指針,格式控制字符串,輸入項表)

例如:fscanf(fp,"%d%d",a,b);

fscanf(stdin,"%d%d",a,b);

等價于scanf("%d%d",a,b);

3.fprintf函數

fprintf函數按格式將內存中的數據轉換成對應的字符,并以ASCII代碼形式輸出到文本文件中.Fprintf函數和printf函數相似,只是將輸出的內容按格式存放到磁盤的文本文件中.調用形式如下:

fprintf(文件指針,格式控制字符串,輸出項表)

如:fprintf(fp,"%d %d",x,y);

以下語句 fprintf(stdout,"%d %d",x,y)

13.8fgets函數和fputs函數

1,fgets函數

fgets函數用來從文件中讀入字符串.調用形式如下:

fgets(str,n,fp);

函數功能是:從fp所指文件中讀入n-1個字符放入str為起始地址的空間內;如果在未讀滿n-1個字符時,則遇到換行符或一個EOF結束本次讀操作,并已str作為函數值返回.

13.8fgets函數和fputs函數

2,fputs函數

fput函數把字符串輸出到文件中.函數調用形式如下:

fputs(str,fp);

注意:為了便于讀入,在輸出字符串時,應當人為的加諸如"\n"這樣的字符串.

#include stdio.h

#include iostream

int main(int argc, char *argv[])

{

char arr[10] ;

char *ap = "hello!" ;

FILE *fp ;

if ((fp = fopen("hello.txt", "wt+")) == NULL)

{

printf("error!") ;

exit(1) ;

}

fputs(ap, fp) ;

rewind(fp) ; //

fgets(arr, 10, fp) ;

printf("%s\n", arr) ;

fclose(fp) ;

return 0 ;

}

13.9fread函數和fwrite函數

例如有如下結構體:

struct st{

char num[8];

float mk[5];

}pers[30];

以下循環將把這30個元素中的數據輸出到fp所指文件中.

for(i=0;i30;i++)

fwrite(pers[i],sizeof(struct st),1,fp);

13.9fread函數和fwrite函數

以下語句從fp所指的文件中再次將每個學生數據逐個讀入到pers數組中.

i=0;

fread(pers[i],sizeof(struct st),1,fp);

while(!feof(fp))

{ i++;

fread(pers[i],sizeof(struct st),1,fp);

}

13.10文件定位函數

1,fseek函數

fseek函數用來移動文件位置指針到指定的位置上,接著的讀或寫操作將從此位置開始.函數的調用形式如下:

fseek(pf,offset,origin)

pf:文件指針

offset:以字節為單位的位移量,為長整形.

origin:是起始點,用來指定位移量是以哪個位置為基準的.

1,fseek函數

位移量的表示方法

標識符 數字 代表的起始點

SEEK_SET 0 文件開始

SEEK_END 2 文件末尾

SEEK_CUR 1 文件當前位置

假設pf已指向一個二進制文件,則;

fseek(pf,30L,SEEK_SET)

fseek(pf,-10L*sizeof(int),SEEK_END)

對于文本文件,位移量必須是0;如:

fseek(pf,0L,SEEK_SET)

fseek(pf,0L,SEEK_END)

2. ftell函數

ftell函數用以獲得文件當前位置指針的位置,函數給出當前位置指針相對于文件開頭的字節數.如;

long t;

t=ftell(pf);

當函數調用出錯時,函數返回-1L.

我們可以通過以下方式來測試一個文件的長度:

fseek(fp,0L,SEEK_END);

t=ftell(fp);

3.rewind函數

調用形式為:

rewind(pf);

函數沒有返回值.函數的功能是使文件的位置指針回到文件的開頭.

13.10文件應用

在磁盤上的test.txt文件中放有10個不小于2的正整數,用函數調用方式編寫程序.要求實現:

1,在被調函數prime中,判斷和統計10個整數中的素數以及個數.

2,在主函數中將全部素數追加到磁盤文件test.txt的尾部,同時輸出到屏幕上.

#include

#include

Int prime(int a[],int n)

{

int I,j,k=0,flag=0;

for(i=0;i { for(j=2;j if(a[i]%j==0)

{ flag=0; break;}

else flag=1;

if(flag)

{a[k]=a[i];k++;}

}

return k;

}

void main(){

int n,I,a[10];

FILE *fp;

fp=fopen("test1-2.txt","r+");

for(n=0;n10;n++)

fscanf(fp,"%d",a[n]);

n=prime(a,n);

fseek(fp,o,2);

for(i=0;i {printf("%3d",a[i]);

fprintf(fp,"%3d",a[i]);

}

fclose(fp);

用C語言讀取一個文件中的內容,如何對不同的行進行解析,比如是配置文件?

很簡單的

配置文件 微軟有抓們的一套解析函數

INI文件是Windows系統中一類比較重要的文件,通常用來存放系統或者應用程序的配置信息,以方便系統或者應用 程序在初始化時再次讀入。比如Windows系統中的配置文件win.ini和system.ini,它們就主要存放系統啟動或用戶登陸時的系統信息。這 項功能在方便了系統配置的同時,也為非法程序的自動運行提供了可乘之機。顯然,這類文件的重要性應該引起我們的重視。但是對于這樣的ini文件的讀寫操作 卻與普通文本文件有著種種的不同,尤其體現在編程實現上。筆者曾經嘗試用手動更改的方法在文件中加入一些項,使得自己的程序能夠在初始化時自動運行,但是 卻沒有成功,最后還是藉由編程的方法來實現了。這里主要涉及到一些API函數,而這些函數又往往不被人們所熟知,本文的任務就是在介紹這些函數的同時,用 簡單的程序作了示例,下面我們言歸正傳。

先來看幾個往配置文件中寫入信息的函數:

(1)WritePrivateProfileSection()用來在ini文件中直接向指定區域寫入鍵和值的信息,其原型如下:

BOOL WritePrivateProfileSection(

LPCTSTR lpAppName, // 指向指定字段的字符串

LPCTSTR lpString, // 指向要寫入的鍵與值字符串

LPCTSTR lpFileName // 指向文件名稱字符串,如果不包含完整路徑,則在windows目錄下創建

);

用法示例:

WritePrivateProfileSection(_T(“windows”),_T(“load=c:\\winnt\\notepad.exe”),_T(“c:\\winnt\\win.ini”));

(2)WritePrivateProfileString()與上一個函數的不同點在于其將鍵和值分開了,原型如下:

BOOL WritePrivateProfileString(

LPCTSTR lpAppName, // 指向指定字段的字符串

LPCTSTR lpKeyName, // 指向指定鍵的字符串

LPCTSTR lpString, // 指向指定值的字符串

LPCTSTR lpFileName // 指向文件名稱字符串

);

用法示例:

WritePrivateProfileString(_T(“windows”),_T(load”)_T(“c:\\winnt\\notepad.exe”),_T(“c:\\winnt\\win.ini”));

(3)WritePrivateProfileStruct()與前面兩個的不同在于文件尾有校驗和,原型如下:

BOOL WritePrivateProfileStruct(

LPCTSTR lpszSection, //指向指定字段的字符串

LPCTSTR lpszKey, //指向指定鍵的字符串

LPVOID lpStruct, //指向存放要加入的數據的緩沖區,如果為NULL,則刪除鍵

UINT uSizeStruct, //緩沖區大小,以字節為單位

LPCTSTR szFile //以零結尾的文件名稱字符串,如果為空,則向win.ini寫入

);

用法示例:

WritePrivateProfileStruct(_T(“windows”),_T(“load”),pBuffer,sizeof(pBuffer),_T(“c:\\winnt\\win.ini”));

(4)還有兩個函數,是專門用來向win.ini文件寫入的,函數原型如下:

BOOL WriteProfileSection(

LPCTSTR lpAppName, //指向指定字段的字符串

LPCTSTR lpString //指向指定值的字符串

);

BOOL WriteProfileString(

LPCTSTR lpAppName, //指向指定字段的字符串

LPCTSTR lpKeyName, //指向指定鍵的字符串

LPCTSTR lpString //指向指定值的字符串

);

下面來看幾個對應的從ini文件獲取信息的API函數,上面已經說得很詳細了,這里只說其中兩個:

DWORD GetPrivateProfileString(

LPCTSTR lpAppName, //指向指定字段的字符串

LPCTSTR lpKeyName, //指向鍵的字符串

LPCTSTR lpDefault, //如果INI文件中沒有前兩個參數指定的字段名或鍵名,則將此值賦給變量

LPTSTR lpReturnedString, //存放INI文件中值的目的緩存區

DWORD nSize, //目的緩沖區的大小,以字節為單位

LPCTSTR lpFileName //指向INI文件名稱的字符串

);

UINT GetPrivateProfileInt(

LPCTSTR lpAppName, //指向指定字段的字符串

LPCTSTR lpKeyName, //指向鍵的字符串

INT nDefault, //如果INI文件中沒有前兩個參數指定的字段名或鍵名,則將此值賦給變量

LPCTSTR lpFileName //指向INI文件名稱的字符串

);

程序示例1: 我們在這里建立了一個應用程序“App Name”,并且使用了一個INI文件“appname.ini”,在此INI文件中,我們寫入如下內容:

[Section1]

FirstKey = It all worked out okay.

SecondKey = By golly, it works.

ThirdKey = Another test.

代碼分析如下:

#include stdio.h

#include windows.h

//主函數

main()

{

//定義局部

CHAR inBuf[80];

HKEY hKey1, hKey2;

DWORD dwDisposition;

LONG lRetCode;

// 試圖創建INI文件的鍵值

lRetCode = RegCreateKeyEx ( HKEY_LOCAL_MACHINE,

"SOFTWARE\\Microsoft\\Windows NT

\\CurrentVersion\\IniFileMapping\\appname.ini",

0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE,

NULL, hKey1,

dwDisposition);

//判斷是否出錯

if (lRetCode != ERROR_SUCCESS){

printf ("Error in creating appname.ini key\n");

return (0) ;

}

//試圖設置一個節區的值

lRetCode = RegSetValueEx ( hKey1,

"Section1",

0,

REG_SZ,

"USR:App Name\\Section1",

20);

//判斷是否出錯

if (lRetCode != ERROR_SUCCESS) {

printf ( "Error in setting Section1 value\n");

return (0) ;

}

//試圖創建一個應用名稱鍵值

lRetCode = RegCreateKeyEx ( HKEY_CURRENT_USER,

"App Name",

0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE,

NULL, hKey2,

dwDisposition);

//判斷是否出錯

if (lRetCode != ERROR_SUCCESS) {

printf ("Error in creating App Name key\n");

return (0) ;

}

//強制系統重新讀取映射區的內容到共享內存中,以便于將來對應用程序的調用可//以找到它,而不需要重新啟動系統

WritePrivateProfileStringW( NULL, NULL, NULL, L"appname.ini" );

//向INI文件中添加一些鍵值

WritePrivateProfileString ("Section1", "FirstKey",

"It all worked out okay.", "appname.ini");

WritePrivateProfileString ("Section1", "SecondKey",

"By golly, it works.", "appname.ini");

WritePrivateProfileSection ("Section1", "ThirdKey = Another Test.",

"appname.ini");

//測試一下添加的正確性

GetPrivateProfileString ("Section1", "FirstKey",

"Bogus Value: Get didn't work", inBuf, 80,

"appname.ini");

printf ("%s", inBuf);

return(0);

}

程序示例2:通過修改win.ini中的字段[windows]中的鍵load或run,或者是為system.ini中的字段[boot]中的鍵 shell增加值,可以達到設置程序自動運行的目的。假設我們要自動運行notepad.exe,修改后的win.ini或system.ini文件象這 樣就可以:

win.ini

[windows]

load=c:\winnt\notepad.exe

run=c:\winnt\notepad.exe

system.ini

[boot]

shell=c:\winnt\explorer.exe c:\winnt\notepad.exe

注意:system.ini文件的修改要特別注意,如果你單純改成shell=c:\winnt\notepad.exe,則不能首先運行 explorer.exe,很明顯你將看不到桌面和任務欄,呵呵,筆者在做實驗時就曾因為粗心造成了這樣的后果,不過不用害怕,只要你用我們下面提供的程 序,將它修改過來就可以了,默認時,系統在system.ini中的[boot]下是shell=c:\winnt\explorer.exe。很多非法 程序就是通過修改這兩個文件來達到自啟動的目的的。

下面這個程序可以在附書光盤中找到,名稱為“AutoPlay”,使用VC++6.0寫成,核心程序源代碼如下:

void CAutoRunDlg::OnBrowse()

{

//只瀏覽exe文件

CfileDialog fileDlg(TRUE,_T("EXE"),_T("*.exe"),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,(_T("Executable Files (*.exe) |*.exe ||")));//顯示打開文件的對話框

//當操作者選擇OK時,程序取得選擇文件的全路徑名(包括文件的路徑及文件名稱),并將相應的數值傳輸給相關的控件變量。

if(fileDlg.DoModal()==IDOK)

{

m_strFileName=fileDlg.GetPathName();

//向將變量中的數值傳輸給控件顯示出來。

UpdateData(FALSE);

}

}

void CAutoRunDlg::OnApply()

{

//更新數據

UpdateData(TRUE);

//寫入ini文件

LPCTSTR filename;

filename=m_strFileName;

WritePrivateProfileString(_T("windows"),_T("load"),filename,_T("c:\\winnt\\win.ini"));

}

您如果要更改system.ini,可以將WritePrivateProfileString(_T("windows"),_T("load"),filename,_T("c:\\winnt\\win.ini"));

改為 WritePrivateProfileString(_T("boot"),_T("shell"),filename,_T("c:\\winnt \\system.ini"));并且在輸入文件名時輸入c:\winnt\explorer.exe c:\winnt\notepad.exe。

寫到這里,本文的意圖基本達到,如果您可以把某些代碼親自實現,相信讀者會有比較大的收獲。

網站標題:c語言文件解析函數ini c語言文件處理函數
轉載源于:http://www.yijiale78.com/article2/hhijoc.html

成都網站建設公司_創新互聯,為您提供外貿網站建設Google網站導航虛擬主機手機網站建設標簽優化

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

h5響應式網站建設