獲取目錄或者文件的相對路徑

如圖,以文件爲例:

得到相對路徑:

核心代碼:

int RelativePath(const std::string& strDir, const std::string& strSavePath, bool bJustDir, const std::string strSuffixs)
{
	if (strDir.length() == 0 || strSavePath.length() == 0)
	{
		return -1;
	}

	if (!bJustDir && strSuffixs.length() == 0)
	{
		return -1;
	}

	//讀取當前目錄下的目錄,並且保存相對路徑,以半角;保存
	std::vector<std::string> vDirs;
	size_t nDirNum = getDirs(strDir, vDirs, false);
	std::string vSaveContent;
	for (size_t i = 0; i < nDirNum; ++i)
	{
		const std::string strCurDir = vDirs[i];
		std::string strSaveLine = CStdStr::ReplaceAllDistinct(strCurDir, CStdStr::AddSlashIfNeeded(strDir), ".\\");
		vSaveContent += strSaveLine + ';';
	}

	if (!bJustDir)
	{
		//添加需要保存的文件
		std::vector<std::string> vFiles;
		size_t nFileNum = getFiles(strDir, vFiles, strSuffixs.c_str(), false);
		for (size_t i = 0; i < nFileNum; ++i)
		{
			const std::string strCurFile = vFiles[i];
			std::string strSaveLine = CStdStr::ReplaceAllDistinct(strCurFile, CStdStr::AddSlashIfNeeded(strDir), ".\\");
			vSaveContent += strSaveLine + ';';
		}
	}

	CStdFile::SaveTXTFile(strSavePath, vSaveContent);

	ShellExecute(NULL,_T("open"), CStdStr::s2ws(strSavePath).c_str() ,NULL,NULL, SW_SHOW);

	return 0;
}

如需程序或者完整代碼,歡迎聯繫我。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章