在VC編程中,文件和路徑問題是很重要的。例如,MFC編程中要我們會使用文件類來打開或保存一個文件;編程中要獲得某一目錄並在該目錄下順序的存儲文件;編程中要指定某一目錄並順序讀取該目錄下的文件等。下面我簡要介紹下編程過程中遇到的目錄操作。
1.使用文件對話框打開或保存文件
使用文件對話框類CFileDialog。CFileDialog實現了Windows的基本文件對話框。其構造函數原型爲:
CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL )。
其中第一個參數爲TRUE時,構造一個打開文件對話框對象,爲FALSE時構造一個保存文件對話框對象;參數LPCTSTR lpszFilter爲打開或保存的類型 常用一個字符串傳遞。
典型的使用方法如下:
char szPara[] = "*.bmp|*.bmp|*.*|*.*||";
UpdateData(TRUE);
//保存對話框 打開
CFileDialog dlg(FALSE/TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szPara);
//注:第一個參數爲TRUE爲打開,爲FALSE爲保存
if ( IDOK == dlg.DoModal() )
{
m_BmpPath = dlg.GetPathName();
UpdateData(FALSE);
}
注:以上操作僅僅將文件的路徑名傳遞給了參數,具體的打開或保存操作自行完成。
CFileDialog包含的重要成員函數:
|
Displays the dialog box and allows the user to make a selection.
|
|
Returns the full path of the selected file.
|
|
Returns the filename of the selected file.
|
|
Returns the file extension of the selected file.
|
|
Returns the title of the selected file.
|
|
Returns the full path of the next selected file.
|
|
Returns the read-only status of the selected file.
|
|
Returns the position of the first element of the filename list.
|
2.獲取路徑並順序存儲文件
a.得到當前運行程序所在路徑(其實得到的是當前執行程序存放路徑)(考察!!!)
TCHAR szFilePath[MAX_PATH + 1];
GetModuleFileName(NULL, szFilePath, MAX_PATH);
(_tcsrchr(szFilePath, _T('//')))[1] = 0;
CString strtemp=szFilePath;
函數說明:
GetModuleFileName:The GetModuleFileName function retrieves the full path and filename for the executable file containing the specified module.
b.得到程序當前工作路徑:(因爲程序在運行過程中,會改變工作路徑)
char pBuf[MAX_PATH]; //存放路徑的變量
GetCurrentDirectory(MAX_PATH,pBuf); //獲取程序的當前目錄
strcat(pBuf,"//");
CString strtemp=pBuf;
函數說明:
GetCurrentDirectory:The GetCurrentDirectory function retrieves the current directory for the current process
c.通過路徑得到目錄並自動生成文件名順序存取文件
例如:CString m_BmpPath中保存當前文件的路徑,我們要得到該文件所在的文件夾路徑也就是目錄。則需進行以下操作:
int n = m_BmpPath.ReverseFind('//');//查找最右側‘/’的位置
m_BmpPath = m_BmpPath.Left(n);//截取最右側‘/’左側部分
m_BmpPath += '//';//添加‘/’
使用int nFrameNo 進行計數並將其作爲文件名,將文件存放在m_BmpPath目錄下,進行以下操作:
CString strFilePath;//定義文件路徑存放使用的字符串
for(;;)
{
strFileName.Format("%s%d.bmp",strBmpPath,lFrameNo);//動態生成文件名
//保存文件
}
d.指定路徑並順序讀取該路徑下的文件
假定在文件夾D:/File/ 下存放有100幅圖片,圖片命名是有規律的,我們要讀取這些圖片。則需進行以下操作:
CFileFind finder; //定義CFileFind對象
CString strName; //保存文件路徑名
BOOL bIsWorking; //標誌是否找完所有文件
SetCurrentDirectory("D://File");//設置查找目錄
bIsWorking = finder.FindFile("*.bmp");//開始一個查找,查找.bmp文件
for ( ;; )//循環查找 注:FindNextFile()找到最後一個文件時返回0;
{
if(bIsWorking)
{
bIsWorking = finder.FindNextFile();
strName = finder.GetFilePath();//文件路徑
讀取文件;
}
else
break;
}
注:Windows XP環境下 文件系統爲FAT32 時 使用FindFile() FindNextFile()進行文件查找時得到的文件順序是文件的寫入順序。即時間順序。
TrimLeft方法的意義是:從字符串左邊看起,遇到括號中出現的字符(參數)全部截去,直到出現第一個括號中未出現的字符時停止截除,即使後面又出現了參數中有的字符也不會截去了。TrimLeft方法的意義是:從字符串左邊看起,遇到括號中出現的字符(參數)全部截去,直到出現第一個括號中未出現的字符時停止截除,即使後面又出現了參數中有的字符也不會截去了。
TrimRight方法類似。
去除當前字符串的前導和後綴空格字符TrimLeft()、TrimRight()
Trim()
功能刪除字符串首部和尾部的空格。
語法Trim ( string )
參數string:string類型,指定要刪除首部和尾部空格的字符串返回值String。函數執行成功時返回刪除了string字符串首部和尾部空格的字符串,發生錯誤時返回空字符串("")。如果任何參數的值爲NULL,Trim()函數返回NULL。