在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包含的重要成员函数:
DoModal
|
Displays the dialog box and allows the user to make a selection.
|
GetPathName
|
Returns the full path of the selected file.
|
GetFileName
|
Returns the filename of the selected file.
|
GetFileExt
|
Returns the file extension of the selected file.
|
GetFileTitle
|
Returns the title of the selected file.
|
GetNextPathName
|
Returns the full path of the next selected file.
|
GetReadOnlyPref
|
Returns the read-only status of the selected file.
|
GetStartPosition
|
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。