2012-05-16 47 views
6

Tôi đang cố gắng tạo một hàm hồi quy thư mục mạnh mẽ đệ quy.FindFirstFile trả về quyền truy cập bị từ chối

Với các thư mục thông thường hoạt động khá tốt.

Vấn đề xuất hiện khi tôi tạo ra một "hardcore" direcory, như:

C: \ test \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ ... \ x \ x \ x

Độ dài khoảng 25000 (ít hơn giới hạn MSDN: 32,767). Về cơ bản tôi đã tạo thư mục này đệ quy cho đến khi hàm CreatDirectory thất bại.

Bây giờ, điều kỳ lạ là, mà chức năng của tôi có thể xóa 2 thư mục thì FindFirstFile không thành công với 0x5:

\\?\C:\test\x\ ... \x\x\x\*.* < no error 
\\?\C:\test\x\ ... \x\x\*.*  < no error 
\\?\C:\test\x\ ... \x\*.*  < access denied 

(tôi có thể chạy lại nó, ứng dụng này là chậm nhai lên thư mục, 2 x 2, có lẽ cho đến khi chiều dài đường đi khá nhỏ)

Tôi đang chạy FindFirstFile để kiểm tra xem thư mục có trống không.

  • Có giới hạn nào ít tài liệu hơn không?
  • FindFirstFile chỉ đơn giản là không hoạt động? (buggy?)
  • Tôi có thiếu một số loại quyền hạn NTFS không?
  • Cái gì khác ...

EDIT: LƯU Ý QUAN TRỌNG: Nếu tôi chạy bước chương trình bằng cách bước chậm ... sau đó không có gì sẽ thất bại.

+1

plz hiển thị cho chúng tôi mã bị tước của bạn –

+0

Mã rất lớn và tôi không thấy hữu ích khi đăng bài. – lerosQ

+0

Tôi đã làm điều này chính xác một số lần và không bao giờ có một vấn đề; vấn đề có nhiều khả năng nhất trong mã của bạn. Ít nhất hãy thử giảm nó xuống một ví dụ tối thiểu để xem nó là một cái gì đó hiển nhiên. – Luke

Trả lời

7

Có thể bạn đang gặp phải thứ gì đó giống như trình quét vi-rút, trình lập chỉ mục hoặc giải pháp sao lưu liên tục giữ một tay cầm vào thư mục. Nếu Dịch vụ lập chỉ mục được định cấu hình để lập chỉ mục thư mục đó chẳng hạn.

Cố gắng xóa thư mục hoặc tệp mở khác với FILE_SHARE_DELETE cờ sẽ gây ra ACCESS_DENIED.

Để xác nhận điều này, hãy sử dụng Trình theo dõi quy trình để xem mở và đóng trên bất kỳ thứ gì khớp với đường dẫn của bạn.

(Tất nhiên cũng xác nhận bạn đã gọi là FindClose).

+0

Dịch vụ lập chỉ mục đang quering thư mục sâu nhất ... luôn luôn. – lerosQ

+0

Vấn đề của tôi là quyền truy cập đã sai trên tệp tôi đang cố gắng truy cập. Nó có vẻ giống như giải pháp 'duh' nhưng tôi sẽ kiểm tra tính bảo mật của tệp và bảo đảm rằng nhóm truy cập chính xác có thể truy cập tệp, vì trường hợp rõ ràng nhất của 'ACCESS_DENIED', nguyên nhân ... bạn không thể truy cập các tệp = P – mgrandi

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