2011-07-18 36 views
6

Tôi gặp vấn đề với đơn đăng ký của mình. Ứng dụng lưu trữ cơ sở dữ liệu SQLite trong thư mục C:\ProgramData\ProgramName\ khi chạy lần đầu tiên. Tôi muốn kiểm tra nếu tôi xóa cơ sở dữ liệu, ứng dụng có thể tạo cơ sở dữ liệu mới không. Khi khởi động, tôi kiểm tra xem tệp có tồn tại không bằng cách sử dụng hàm FileExists(filename) từ SysUtils. Nhưng nó trả về luôn đúng, ngay cả khi tôi đã xóa thư mục ProgramName.Xóa tệp khỏi C:/ProgramData trong Windows 7 không thực sự xóa tệp?

Nếu tôi sử dụng một thư mục khác (ví dụ% AppData%), thì tất cả đều OK.

Tôi thiếu gì ở đây? Tại sao chức năng FileExists trả về luôn đúng?

+1

Chương trình của bạn có quyền ghi vào đó không? Khác bạn có thể nhấn shim chuyển hướng. – CodesInChaos

+0

@CodeInChaos Shim chuyển hướng là gì? – evilone

+0

Ok tìm thấy tệp cơ sở dữ liệu ảo của tôi quá tại thư mục% AppData% \ Local \ VirtualStore \ ProgramData \ ProgramName – evilone

Trả lời

2

Người dùng chuẩn (và bao gồm quản trị viên khi UAC đang hoạt động) không có quyền xóa đối với vị trí đó.

Bạn cần phải tìm một vị trí khác để lưu trữ tệp nếu bạn cần người dùng chuẩn để có thể xóa tệp đó.

+0

Vị trí chính xác ở đâu, tại đây tất cả người dùng có thể truy cập tệp? – evilone

+0

@evilone Bạn có muốn tất cả người dùng chia sẻ một phiên bản tệp không? –

+0

Có, tôi muốn tất cả người dùng có quyền truy cập vào tệp cơ sở dữ liệu đó – evilone

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