1. 程式人生 > >介紹幾個程式中關於"路徑字串"的函式

介紹幾個程式中關於"路徑字串"的函式

程式中經常用到獲取路徑。

之前的部落格也講到過關於獲取路徑的一些操作。

獲取系統特殊目錄
比如使用SHGetFolderPath函式獲取windows系統的一些目錄:

HRESULT SHGetFolderPath( 
HWND hwndOwner, 
int nFolder, 
HANDLE hToken, 
DWORD dwFlags, 
LPTSTR pszPath 
); 

以上為函式原型,其中nFolder指定要獲取的目錄(具體參考MSDN說明)
CSIDL_BITBUCKET 回收站
CSIDL_CONTROLS 控制面板
CSIDL_DESKTOP Windows 桌面Desktop
CSIDL_DESKTOPDIRECTORY Desktop的目錄
CSIDL_DRIVES 我的電腦
CSIDL_FONTS 字型目錄
CSIDL_NETHOOD 網路上的芳鄰
CSIDL_NETWORK 網路上的芳鄰虛擬目錄
CSIDL_PERSONAL 我的文件
CSIDL_PRINTERS 印表機
CSIDL_PROGRAMS 程式組
CSIDL_RECENT 最近開啟的文件
CSIDL_SENDTO “傳送到”選單項
CSIDL_STARTMENU 任務條啟動選單項
CSIDL_STARTUP 啟動目錄
CSIDL_TEMPLATES 文件模板

判斷一個目錄是否存在
直接上程式碼了:

#include<iostream>
#include<Windows.h>

bool FolderExists(std::wstring s);

int main()
{
    std::cout << FolderExists(L"D:/lcwin") << std::endl;
}

bool FolderExists(std::wstring s)
{
    DWORD attr;
    attr = GetFileAttributes(s.data());
    return (attr != (DWORD)(-1
)) && (attr & FILE_ATTRIBUTE_DIRECTORY); }

判斷一個路徑是否存在中文

bool HaveChineseChar(std::wstring path)
{
    bool bHaveChineseChar = FALSE;
    for (size_t i = 0; i < path.length(); i++)
    {
        if (path.at(i) > 255)
        {
            bHaveChineseChar = TRUE;
            break;
        }
    }
    return
bHaveChineseChar; }

中文路徑總是困擾著我們,尤其是使用sqlite資料庫的時候。所以,有時候你希望寫一個函式來判斷一個路徑中是否含有中文。

判斷檔案是否存在

bool isFileExist(const char * strFileName)
{
    if (_access(strFileName, 0) == 0)
    {
        return true;
    }
    return false;
}