c語言瀏覽文件,c#讀文件

本文目錄一覽:

用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語言如何調用系統的文件瀏覽功能?

加上頭文件#include commdlg.h

其格式如下

OPENFILENAME ofn;

char path[MAX_PATH];

static TCHAR szFilter[] = TEXT (“Text Files (*.TXT)\0*.txt\0”) \

TEXT (“ASCII Files (*.ASC)\0*.asc\0”) \

TEXT (“All Files (*.*)\0*.*\0\0”) ;

ofn.lStructSize = sizeof (OPENFILENAME) ;

ofn.hwndOwner = hwnd ;

ofn.hInstance = NULL ;

ofn.lpstrFilter = szFilter ;

ofn.lpstrCustomFilter = NULL ;

ofn.nMaxCustFilter = 0 ;

ofn.nFilterIndex = 0 ;

ofn.nMaxFile = MAX_PATH ;

ofn.nMaxFileTitle = MAX_PATH ;

ofn.lpstrInitialDir = NULL ;

ofn.lpstrTitle = NULL ;

ofn.Flags = 0 ; // Set in Open and Close functions

ofn.nFileOffset = 0 ;

ofn.nFileExtension = 0 ;

ofn.lpstrDefExt = TEXT (“txt”) ;

ofn.lCustData = 0L ;

ofn.lpfnHook = NULL ;

ofn.lpTemplateName = NULL ;

ofn.hwndOwner = hwnd ;

ofn.lpstrFile = path ;

ofn.lpstrFileTitle = NULL ;

ofn.Flags = OFN_HIDEREADONLY | OFN_CREATEPROMPT ;

GetOpenFileName (ofn) ;//打開文件對話框

GetSaveFileName(ofn);//保存文件對話框

c語言怎麼打開一個文件夾,求完整程序

如果是源文件的話,單擊右鍵,找到並打開「屬性」,屬性的「常規」裡面有打開方式,你單擊「打開方式」後面的「更改」,然後再「推薦程序”與”其他程序里”找,如果沒有,那麼點擊下面的「瀏覽」,這一步是要找到你安裝turbo CC++的目錄下你turbo cC++這個應用程序的圖標,這圖標一般跟你安裝後出現在桌面的圖標相似。(如果你是默認安裝的,那麼你一般可以去c盤,program files文件夾,然後可能會看到名字含有turbo 單詞的文件夾,在裡面也許你可以直接看到那個應用程序圖標,也許不能,不能的話,那就在裡面有個bin文件夾的,bin就是二進位的意思,bin文件夾里一般含有這個應用程序的圖標。你選中後摁下面的「打開」就行了。

你是初中生嗎,怎麼還用turbo c呢,是用的譚浩強的教材吧,他的教材其實裡面有些源程序錯誤挺多的。

C語言源程序文件的後綴是什麼?

.APS:存放二進位資源的中間文件,VC把當前資源文件轉換成二進位格式,並存放在APS文件中,以加快資源裝載速度。資源輔助文件。 \x0d\x0a\x0d\x0a.BMP:點陣圖資源文件。 \x0d\x0a\x0d\x0a.BSC:瀏覽信息文件,由瀏覽信息維護工具(BSCMAKE)從原始瀏覽信息文件(.SBR)中生成,BSC文件可以用來在源代碼編輯窗口中進行快速定位。用於瀏覽項目信息的,如果用source brower的話就必須有這個文件。可以在project options里去掉Generate Browse Info File,這樣可以加快編譯進度。 \x0d\x0a\x0d\x0a.C:用C語言編寫的源代碼文件。 \x0d\x0a\x0d\x0a.CLW:ClassWizard生成的用來存放類信息的文件。classwizard信息文件,ini文件的格式。 \x0d\x0a\x0d\x0a.CNT:用來定義幫助文件中「Contents」的結構。 \x0d\x0a\x0d\x0a.CPP或.CXX:用C++語言編寫的源代碼文件。 \x0d\x0a\x0d\x0a.CUR:游標資源文件。 \x0d\x0a\x0d\x0a.DEF:模塊定義文件,供生成動態鏈接庫時使用。 \x0d\x0a\x0d\x0a.DLG:定義對話框資源的獨立文件。這種文件對於VC工程來說並非必需,因為VC一般把對話框資源放在.RC資源定義文件中。 \x0d\x0a\x0d\x0a.DSP:VC開發環境生成的工程文件,VC4及以前版本使用MAK文件來定義工程。項目文件,文本格式。 \x0d\x0a\x0d\x0a.DSW:VC開發環境生成的WorkSpace文件,用來把多個工程組織到一個WorkSpace中。工作區文件,與.dsp差不多。 \x0d\x0a\x0d\x0a.EXP:由LIB工具從DEF文件生成的輸出文件,其中包含了函數和數據項目的輸出信息,LINK工具將使用EXP文件來創建動態鏈接庫。只有在編譯DLL時才會生成,記錄了DLL文件中的一些信息。 \x0d\x0a\x0d\x0a.H、.HPP或.HXX:用C/C++語言編寫的頭文件,通常用來定義數據類型,聲明變數、函數、結構和類。 \x0d\x0a\x0d\x0a.HLP:Windows幫助文件。 \x0d\x0a\x0d\x0a.HM:在Help工程中,該文件定義了幫助文件與對話框、菜單或其它資源之間ID值的對應關係。 \x0d\x0a\x0d\x0a.HPJ:由Help Workshop生成的Help工程文件,用來控制Help文件的生成過程。 \x0d\x0a\x0d\x0a.HPG,生成幫助的文件的工程。 \x0d\x0a\x0d\x0a.ICO:圖標資源文件。 \x0d\x0a\x0d\x0a.ILK:連接過程中生成的一種中間文件,只供LINK工具使用。 \x0d\x0a\x0d\x0a.INI:配置文件。 \x0d\x0a\x0d\x0a.LIB:庫文件,LINK工具將使用它來連接各種輸入庫,以便最終生成EXE文件。 \x0d\x0a\x0d\x0a.LIC:用戶許可證書文件,使用某些ActiveX控制項時需要該文件。 \x0d\x0a\x0d\x0a.MAK:即MAKE文件,VC4及以前版本使用的工程文件,用來指定如何建立一個工程,VC6把MAK文件轉換成DSP文件來處理。 \x0d\x0a\x0d\x0a.MAP:由LINK工具生成的一種文本文件,其中包含有被連接的程序的某些信息,例如程序中的組信息和公共符 \x0d\x0a\x0d\x0a號信息等。執行文件的映像信息記錄文件。 \x0d\x0a\x0d\x0a.MDP:舊版本的項目文件,相當於.dsp \x0d\x0a\x0d\x0a.NCB:NCB是「No Compile Browser」的縮寫,其中存放了供ClassView、WizardBar和Component Gallery使用的信息,由VC開發環境自動生成。無編譯瀏覽文件。當自動完成功能出問題時可以刪除此文件。編譯工程後會自動生成。 \x0d\x0a\x0d\x0a.OBJ:由編譯器或彙編工具生成的目標文件,是模塊的二進位中間文件。 \x0d\x0a\x0d\x0a.ODL:用對象描述語言編寫的源代碼文件,VC用它來生成TLB文件。 \x0d\x0a\x0d\x0a.OLB:帶有類型庫資源的一種特殊的動態鏈接庫,也叫對象庫文件。 \x0d\x0a\x0d\x0a.OPT:VC開發環境自動生成的用來存放WorkSpace中各種選項的文件。工程關於開發環境的參數文件。如工具條位置信息等。 \x0d\x0a\x0d\x0a.PBI、.PBO和.PBT:由VC的性能分析工具PROFILE生成並使用的三種文件。 \x0d\x0a\x0d\x0a.PCH:預編譯頭文件,比較大,由編譯器在建立工程時自動生成,其中存放有工程中已經編譯的部分代碼,在以後建立工程時不再重新編譯這些代碼,以便加快整個編譯過程的速度。 \x0d\x0a\x0d\x0a.PDB:程序資料庫文件,在建立工程時自動生成,其中存放程序的各種信息,用來加快調試過程的速度。記錄了程序有關的一些數據和調試信息。 \x0d\x0a\x0d\x0a.PLG:編譯信息文件,編譯時的error和warning信息文件。 \x0d\x0a\x0d\x0a.RC:資源定義文件。 \x0d\x0a\x0d\x0a.RC2:資源定義文件,供一些特殊情況下使用。 \x0d\x0a\x0d\x0a.REG:註冊表信息文件。 \x0d\x0a\x0d\x0a.RES:二進位資源文件,資源編譯器編譯資源定義文件後即生成RES文件。 \x0d\x0a\x0d\x0a.RTF:Rich Text Format(豐富文本格式)文檔,可由Word或寫字板來創建,常被用來生成Help文件。 \x0d\x0a\x0d\x0a.SBR:VC編譯器為每個OBJ文件生成的原始瀏覽信息文件,瀏覽信息維護工具(BSCMAKE)將利用SBR文件來生成BSC文件。 \x0d\x0a\x0d\x0a.TLB:OLE庫文件,其中存放了OLE自動化對象的數據類型、模塊和介面定義,自動化伺服器通過TLB文件就能了解自動化對象的使用方法。 \x0d\x0a\x0d\x0a.WAV:聲音資源文件。

請教各位大蝦,用c語言或者c++怎麼編寫一個文件瀏覽器。。

char s[256]= “C:\\”;

用FindFirstFile()FindNextFile();打開該文件夾下所有目錄

原創文章,作者:UDAK,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/131193.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
UDAK的頭像UDAK
上一篇 2024-10-03 23:43
下一篇 2024-10-03 23:43

相關推薦

發表回復

登錄後才能評論