[英]C++ - Copying a file to all sub directories
我正在嘗試創建一個出於教育目的的程序,該程序應該能夠將.exe
相同目錄內的一個文件(任何擴展名,文件名永不更改)復制到主目錄內的所有目錄中。 因此,例如,我有:
在這種情況下,程序應將file.something復制到directory1、2和3。通過使用此代碼,我可以訪問.exe
文件夾的絕對路徑:
char basePath[255]="";
_fullpath(basePath,argv[0],sizeof(basePath));
理想地,為了解決該問題,可以實現兩個功能:
第一個功能:
Input:
(char[]) The .exe's folder if necessary
Output:
(int) Number of folders inside the .exe's folder.
第二功能:
input:
(int) which folder to pick
(int) total number of folders
(char[]) the .exe's folder if necessary
Output:
(char[]) the name of the folder
使用這兩個函數(應該返回一個char數組而不是一個字符串,因為我被迫使用這些數組使代碼正常工作),我將能夠進行一個簡單的循環,每次更改目標文件夾並復制歸檔到它。
當然,如果存在更好的解決方案,那么這就是解決問題的方式,就這樣吧。
最后一件事:如果您可以添加每個塊或命令的功能,因為我還在學習c ++,而我目前是一個初學者,我將非常高興。
假設:
[_fullpath()
] 1編寫非可移植代碼 _fillpath()
而不是_wfullpath()
禁用了Unicode 用Windows怎么做?
您可以使用FindFirstFile()和FindNextFile()遍歷目錄。 MSDN有一個很好的示例 ,說明了如何使用它們。
不幸的是, FindFirstFile()
是非常基礎的,它自身只能基於包含通配符的文件名來搜索條目。 在查找目錄時,這會更加棘手:您必須使用FindFirstFileEx()
。 函數文檔中稱為fSearchOp的參數應為FindExSearchLimitToDirectories
數據以WIN32_FIND_DATA結構返回,您可以在其中讀取cFileName
。 順便說一句,嘗試不惜一切代價避免像255這樣的硬編碼長度,而改用眾所周知的常量(此處是Windows特定的MAX_PATH)。
最后,在循環時,您可以使用自己的基於C ++標准的復制功能或Windows特定的CopyFile()
執行復制
結束語
這種體操根本不是便攜式的。 如果要在Windows以外的其他平台上使用代碼,則必須使用完全不同的API,例如,針對unix / linux和co的dirent.h 。 這就是為什么對於這種特殊的工作,像boost這樣的第三方庫非常有用。 如果有時間,請在此處查找具有boost的目錄迭代教程,並與基於Windows的代碼進行比較。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.