2016-02-02 41 views
2

使用C++(在visual studio 2013中),我該如何編寫一段代碼來搜索特定文件的系統路徑並返回文件的完整路徑?我只有文件的基本名稱。通過系統路徑,我的意思是窗口中的路徑環境變量(您可以通過在命令窗口中輸入「set path」來查看路徑)。如何在C++中編寫一段代碼來查找系統路徑上文件的完整路徑?

例如。我喜歡有一些像,提前

file_name = "my_test.xml" 
path = find_file(fine_name); 

感謝


我想出答案。下面是一段代碼,正是我一直在尋找它:

#include <iostream> 
#include <Shlwapi.h> 

wchar_t* get_file_full_path(const wchar_t file_name[]){ 
    wchar_t buf[MAX_PATH]; 
    wcscpy_s(buf, wcslen(file_name) + 1, file_name); 
    if (PathFindOnPath(buf, NULL)) { 
     std::wcout << file_name << " found." << std::endl; 
     std::wcout << buf << std::endl; 
    } 
    else { 
     std::wcout << "Could not find the file " << file_name << " on the system path."; 
    } 
    return buf; 
} 
+1

這可能是有益的http://www.cplusplus.com/forum/unices/104524/ http://stackoverflow.com/questions/ 24447540/c-how-to-search-files-in-a-directory-with-certain-name –

+0

你提到[PATH](https://en.wikipedia.org/wiki/PATH_%28variable%29)變量?掃描它似乎很容易。或者您是否想在深層文件層次結構中找到文件,只知道其基本名稱? –

+0

如果您的操作系統窗口考慮https://msdn.microsoft.com/en-us/library/windows/desktop/aa364418%28v=vs.85%29.aspx – VolAnd

回答

2

您可以先檢查系統路徑,如果沒有找到它,你需要做在搜索文件機。 根據你的開發環境,有不同的方式來做到這一點。假設你使用的是Windows系統,這是一個例子:

#include <Windows.h> 
#include <iostream> 
int main() 
{ 
    WIN32_FIND_DATA file; 
    HANDLE search_handle=FindFirstFile(L"C:\\*",&file); 
    if (search_handle) 
    { 
     do 
     { 
      std::wcout << file.cFileName << std::endl; 
     }while(FindNextFile(search_handle,&file)); 
     CloseHandle(search_handle); 
    } 
} 
+0

這是一個非常相關的答案。它打印出C:\目錄中的所有文件和文件夾。如果我需要找到一個我不知道它在哪裏的文件,而我所知道的是它位於路徑上的某個目錄中,該怎麼辦? – MrAliB

+0

然後,您應該檢查PATH上的每個位置。您需要從環境變量中讀取PATH,通常是「;」分隔。然後,將每個位置替換到程序當前查看C:\\ *目錄的位置。 – Harriet

+0

請看看我在頂部發布的解決方案。我覺得它更直接。感謝您對這個問題的意見。 – MrAliB