簡體   English   中英

C ++-將文件復制到所有子目錄

[英]C++ - Copying a file to all sub directories

我正在嘗試創建一個出於教育目的的程序,該程序應該能夠將.exe相同目錄內的一個文件(任何擴展名,文件名永不更改)復制到主目錄內的所有目錄中。 因此,例如,我有:

  • 主目錄
  • 程式
  • file.something
  • 目錄1
  • 目錄2
  • 目錄3

在這種情況下,程序應將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編寫非可移植代碼
  • 您僅定位Windows
  • 您使用_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM