有人可以指導我解決一個可能的解決方案嗎?我不想使用/bin/cp
或任何其他外國應用程序。我希望我的計劃是獨立的。另外我知道每個系統都非常具體,所以我對UNIX/Linux兼容性感興趣。在Linux/UNIX上以純C遞歸複製目錄
我該如何解決?只要沿着源代碼目錄並在目標文件夾中創建一個新目錄並複製其中的文件,或者有更好的解決方案?
BTW我的目標是:複製所有一級子目錄遞歸到目標目錄。如果它們不存在有
有人可以指導我解決一個可能的解決方案嗎?我不想使用/bin/cp
或任何其他外國應用程序。我希望我的計劃是獨立的。另外我知道每個系統都非常具體,所以我對UNIX/Linux兼容性感興趣。在Linux/UNIX上以純C遞歸複製目錄
我該如何解決?只要沿着源代碼目錄並在目標文件夾中創建一個新目錄並複製其中的文件,或者有更好的解決方案?
BTW我的目標是:複製所有一級子目錄遞歸到目標目錄。如果它們不存在有
你真的需要某種形式的遞歸下降到一個目錄樹。這樣做,你可以實現這個非常便攜(在Linux上使用opendir
/readdir
,在Windows上使用FindFirstFile
/FindNextFile
)。剩下的問題是實際的複製。可以使用C標準庫爲與下面的算法:
fread
一個從源恆定大小的塊,然後fwrite
它目標。停止,如果源文件不包含更多的數據希望這有助於:)
使用POSIX nftw(3)
功能走路要複製樹。您可以使用一個回調函數提供此函數,該函數將在每個文件/目錄的路徑上調用。定義一個回調,將它被調用的文件/目錄複製到目標樹中。類型struct FTW *
的第四個回調參數可用於計算相對路徑。
糾正我,如果我錯了,但我不認爲你可以限制這種行走的深度。 – 2012-02-08 12:54:03
@NiklasB:你的問題中沒有這樣的要求。不,你無法限制步行的深度,但你確實可以獲得回調的深度。 – 2012-02-08 13:09:05
這不是我的問題,但它包含這個「第一級別subdirs」約束。感謝您的額外信息。 – 2012-02-08 13:09:55
如果你只想使用C,你可以使用dirent.h。使用這個,你可以遞歸地跟隨目錄結構。然後,您可以在二進制模式下打開文件,並通過寫入流將它們寫入所需的位置。
這功課嗎?你最後一句話聽起來很可疑。如果是這樣,請標記爲。 – 2012-02-08 11:20:31
爲什麼重新發明車輪?爲什麼不使用例如'rsync'? – 2012-02-08 11:21:45
@NiklasB。感謝您的建議 – Uko 2012-02-08 11:29:11