2011-01-25 34 views
5

Tôi có một số tệp trên máy chủ vượt quá giới hạn MAX_PATH. Tôi đã nhiều lần nghe nói rằng bạn có thể liệt kê các tệp đó bằng cách đang chờ xử lý \\? \ Vào đường dẫn. Tuy nhiên, điều đó không giải quyết được sự cố với FindFirstFile[Ex] và các đối tác khi họ sử dụng cấu trúc dữ liệu giới hạn độ dài tên tệp thành MAX_PATH.Cách lặp qua tên đường dẫn dài với bất kỳ hình thức nào của API Windows

Có cách nào khác để lặp qua cấu trúc thư mục để tìm các tệp có tên quá dài không? Tôi đã nhìn thấy các tiện ích mà làm điều đó nhưng không ai trong số họ có sẵn ở dạng nguồn.

Lưu ý rằng tôi đã thấy các mục nhập blog từ các nhóm .NET BCL và theo các liên kết mà họ cung cấp.

Tôi muốn làm điều này trong C hoặc C++ để đơn giản nhưng mọi ngôn ngữ sẵn có miễn phí sẽ làm ngay bây giờ.

Con trỏ tới mã, tài liệu hoặc bất kỳ thứ gì hữu ích được đánh giá cao.

Trả lời

9

Tôi không nghĩ rằng có sự cố ở đây. Bạn đang đề cập đến số WIN32_FIND_DATA thực sự trả lại tên tệp có giới hạn độ dài thành MAX_PATH. Nhưng vì đây chỉ là phần tên tệp và đường dẫn bị bỏ qua, không có giới hạn.

Trong thư mục, đối tượng (tệp hoặc thư mục) bị giới hạn về độ dài, thường là 255 ký tự. Bạn có thể xác định giới hạn này với thông số lpMaximumComponentLengthGetVolumeInformation. Tôi sẽ ngạc nhiên nếu bất kỳ khối lượng nào được gắn trong Windows có thể có độ dài thành phần tối đa vượt quá 255.

Cuộc gọi đến FindFirstFile nhận được một chuỗi vô hiệu, lpFileName chỉ định thư mục và tên tệp (ví dụ: "* .txt ", nói) để tìm kiếm. Tài liệu nêu rõ:

Trong phiên bản ANSI của chức năng này, tên được giới hạn trong MAX_PATH ký tự. Để mở rộng giới hạn này thành 32,767 widecharacters, hãy gọi phiên bản Unicode của hàm và thêm "\\? \" Vào đường dẫn.

+0

Cảm ơn David, bạn đã hoàn toàn chính xác. Đây là những gì tôi nhận được vì không cố gắng sử dụng API trước khi yêu cầu. :) Một tối ưu hóa thực sự sớm? – JimR

Các vấn đề liên quan