2011-07-18 7 views
6

Mam mały problem z moją aplikacją. Aplikacja przechowuje bazę danych SQLite w folderze C:\ProgramData\ProgramName\ przy pierwszym uruchomieniu. Chciałem sprawdzić, czy usunę bazę danych, czy aplikacja może utworzyć nową bazę danych. Podczas uruchamiania sprawdzam, czy plik istnieje za pomocą funkcji FileExists(filename) z SysUtils. Ale zawsze zwraca True, nawet jeśli usunę folder ProgramName.Usunięcie pliku z C:/ProgramData w Windows 7 tak naprawdę nie usuwa pliku?

Jeśli używam innego folderu (na przykład% AppData%), oznacza to, że wszystko jest w porządku.

Czego mi tu brakuje? Dlaczego funkcja FileExists zwraca zawsze wartość True?

+1

Czy twój program ma tam dostęp do zapisu? Inaczej możesz trafić w przekierowanie. – CodesInChaos

+0

@CodeInChaos Czym jest przekierowanie? – evilone

+0

Ok znaleziony mój plik bazy danych zwirtualizowanych również w% AppData% \ Local \ VirtualStore \ ProgramData \ ProgramName folder – evilone

Odpowiedz

2

Standardowi użytkownicy (i obejmujący administratorów, gdy funkcja Kontrola konta użytkownika jest aktywna) nie mają uprawnień do usuwania tej lokalizacji.

Musisz znaleźć inną lokalizację, aby zapisać plik, jeśli potrzebujesz standardowych użytkowników, aby móc go usunąć.

+0

Gdzie jest właściwa lokalizacja, gdzie wszyscy użytkownicy mogą uzyskać dostęp do pliku? – evilone

+0

@evilone Czy chcesz, aby wszyscy użytkownicy współużytkowali pojedynczą instancję pliku? –

+0

Tak, chcę, aby wszyscy użytkownicy mieli dostęp do tego pliku bazy danych – evilone

Powiązane problemy