2011-07-22 31 views
6

Tôi sử dụng tính năng này để lấy nội dung của thư mục foo: FindFirstFile(L"foo\\*", &findData). Nó hoạt động tốt khi foo là một thư mục thông thường. Tuy nhiên, khi foo là đường giao nhau trỏ đến một thư mục khác (được tạo với mklink /j foo C:\gah) FindFirstFile không thành công.FindFirstFile and Junctions

Các tài liệu có điều này để nói: "Nếu đường dẫn trỏ đến một liên kết tượng trưng, ​​bộ đệm WIN32_FIND_DATA chứa thông tin về liên kết tượng trưng, ​​không phải mục tiêu." Nhưng khi tôi chạy nó trình gỡ rối tôi chỉ nhận được một INVALID_HANDLE_VALUE và findData vẫn còn nguyên vẹn.

Vì vậy, làm cách nào để giải quyết vấn đề này?

Trả lời

9

Raymond Chen có số answer cho bạn.

Chức năng như GetFileAttributesFindFirstFile, khi được yêu cầu cung cấp thông tin về một liên kết tượng trưng, ​​trả về thông tin về bản thân liên kết và không phải là điểm đến liên kết. Nếu bạn sử dụng chức năng FindFirstFile, bạn có thể nói rằng bạn có một liên kết tượng trưng vì các thuộc tính tập tin sẽ có cờ đặt FILE_ATTRIBUTES_REPARSE_POINT, và dwReserved0 viên sẽ chứa các giá trị đặc biệt IO_REPARSE_TAG_SYMLINK.

Được rồi, tuyệt vời, vì vậy bây giờ tôi biết tôi có một liên kết tượng trưng, ​​nhưng nếu tôi muốn thông tin về mục tiêu liên kết thì sao? Ví dụ: tôi muốn biết kích thước của mục tiêu liên kết, thời gian được sửa đổi lần cuối và tên của nó.

Để thực hiện việc này, bạn mở liên kết tượng trưng. Các tham chiếu của người quản lý I/O liên kết tượng trưng và cung cấp cho bạn một xử lý đến đích liên kết. Khi đó, bạn có thể gọi các chức năng như GetFileSize, GetFileInformationByHandleEx hoặc GetFinalPathNameByHandle để nhận thông tin về về mục tiêu liên kết tượng trưng.