2013-09-25 34 views
5

Tôi có một chương trình cơ bản nàoLàm thế nào để DeleteFile và FindFirstFile tương tác?

while(1) 
    FindFirstFile() 
    if file found 
    CreateFile() 
    DeleteFile() 
này

Tuy nhiên, đôi khi CreateFile báo cáo ERROR_FILE_NOT_FOUND, mặc dù FindFirstFile tìm thấy một tập tin! DeleteFile có đảm bảo rằng tệp sẽ không hiển thị trong danh sách thư mục sau khi nó trở về không?

+0

Vì vậy, bạn đang cố mở tệp mà tìm thấy 'FindFirstFile' và đôi khi không thành công? –

+0

Vâng, về cơ bản. Nó _seems_ mà FindFirstFile tìm thấy một tệp cần phải có trước đây là DeleteFile: d. –

+0

Bạn có chắc chắn không có quá trình/luồng nào khác chạm vào/xóa (các) tệp được đề cập không? – alk

Trả lời

3

Bạn có thể gặp vấn đề được mô tả bởi Raymond Chen trong his blog.

Về cơ bản, DeleteFile() là "loại" không đồng bộ - nếu tệp bạn đang xóa có bất kỳ tệp nào xử lý nổi bật, hệ thống tệp sẽ đánh dấu tệp là "bị xóa", nhưng nó không thực sự biến mất danh sách thư mục cho đến khi chốt mở cuối cùng được đóng lại - mặc dù DeleteFile trả về thành công.

+0

Vâng, khách hàng như Symantec đã cài đặt với tính năng tìm kiếm chống vi-rút trên mạng được kích hoạt, vì vậy đây thực sự có thể là nguyên nhân. Dường như tôi không thể đếm trên DeleteFile để xóa tệp cho danh sách tệp tiếp theo và tôi sẽ phải thay đổi chương trình của mình để đối phó với điều đó. –

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