2011-07-22 73 views
6

我用這個去獲取目錄foo的內容FindFirstFile(L"foo\\*", &findData)。當foo是一個常規目錄時,它工作的很好。但是,當foo是指向另一個目錄(使用mklink /j foo C:\gah創建)的聯結時,FindFirstFile失敗。FindFirstFile和結果

該文檔有這樣的說法:「如果路徑指向符號鏈接,WIN32_FIND_DATA緩衝區包含有關符號鏈接,而不是目標的信息。」但是當我運行調試器時,我只得到一個INVALID_HANDLE_VALUE,findData保持不變。

那麼,我該如何解決這個問題?

回答

9

Raymond Chen對你有一個answer

GetFileAttributesFindFirstFile,當記者問到 提供有關的符號鏈接信息的函數,返回有關 信息鏈接本身而不是鏈接目標。如果使用 FindFirstFile功能,你可以告訴你有一個符號鏈接 因爲文件的屬性將有 FILE_ATTRIBUTES_REPARSE_POINT標誌設置,以及dwReserved0成員 將包含的特殊價值IO_REPARSE_TAG_SYMLINK

好吧,很好,現在我知道我有一個符號鏈接,但是如果我想要 有關鏈接目標的信息呢?例如,我想知道鏈接目標的大小,最後修改時間和名稱。

爲此,請打開符號鏈接。 I/O管理器取消引用 符號鏈接,併爲您提供鏈接目標的句柄。然後,您可以調用諸如GetFileSize, GetFileInformationByHandleExGetFinalPathNameByHandle之類的函數以獲得關於符號鏈接目標的信息。 。