以前寫代碼時很煩遇到處理檔案路徑的問題.如:提取檔案路徑的目錄部分或者檔案名稱部分、判斷目錄/檔案是否存在等.每次遇到這樣的問題總要自己寫代碼實現,提取目錄就涉及到很繁瑣的字串分析操作,檢測目錄/檔案是否存在都是通過判斷目錄/檔案是否能開啟來實現。水平不夠時,當然寫的越多,隱患BUG就越多.最近翻看網上搜集的一些代碼時發現一些很有用的Shell API能實現我要的部分功能,於是翻看MSDN,才發現自己已經閉門造車了那麼久了.下面簡單地介紹些Shell中關於檔案操作的API函數.
原型:BOOL PathFileExists( LPCTSTR pszPath );
功能:判斷pszPath指定的目錄/檔案是否存在
原型:BOOL PathIsDirectory( LPCTSTR pszPath );
功能:判斷pszPath指定的路徑是否是目錄
原型:BOOL PathIsDirectoryEmpty( LPCTSTR pszPath );
功能:判斷pszPath指定的目錄是否是空目錄
原型:BOOL PathRemoveFileSpec( LPTSTR pszPath );
功能:移除pszPath指定的路徑末尾的檔案名稱和反斜線部分(如果存在)
樣本:
TCHAR szPath[] = _T("D:\\玄幻小說\\蠻荒記.pdf");
if( ::PathRemoveFileSpec( szPath ) )
{
//szPath值為: D:\玄幻小說
}
原型:void PathStripPath( LPTSTR pszPath);
功能:移除pszPath指定的路徑的目錄檔案
樣本:
TCHAR szPath[] = _T("D:\\玄幻小說\\蠻荒記.pdf");
::PathStripPath( szPath );
//szPath值為:蠻荒記.pdf
原型:BOOL PathIsRoot( LPCTSTR pszPath );
功能:判斷pszPath指定的路徑是否是根目錄(即卷標)
原型:BOOL PathIsSameRoot( LPCTSTR pszPath1, LPCTSTR pszPath2 );
功能:判斷pszPath1指定的路徑和pszPath2指定的路徑是否在相同的根目錄下
原型:BOOL PathStripToRoot( LPTSTR szRoot );
功能:移除szRoot 中除根目錄外的其他目錄
原型:LPTSTR PathSkipRoot( LPCTSTR pszPath );
功能:判斷pszPath除根目錄外的其他部分
原型:int PathIsExe( LPCWSTR szfile );
功能:判斷szfile 指定的檔案是否是可執行檔
原型:BOOL PathIsURL( LPCTSTR pszPath );
功能:判斷pszPath指定的路徑是否是URL格式.
還有很多這樣的API,哎,我太類了,不弄了.反正以後我需要類似的功能的時候我會首先去查Shell中已經提供的功能,而不再閉門造車了