c ++ - fopen fejler usynligt, når du opretter filer i systemdrevet (C: \)

Indlæg af Hanne Mølgaard Plasc

Problem



Når jeg forsøger at oprette en fil ved hjælp af fopen, virker fopen som om filen er åbnet korrekt, og at den har fuld adgang til det, men det skaber ikke filen faktisk. Mit program har ikke skriveadgang til systemet root-mappe, fordi den har brug for admin-adgang til at skrive der, men hvorfor er det ikke muligt at give fejl?


Enhver ide om hvordan man fortæller om der er en fejl eller ej? Filhåndtaget, der bliver returneret, når jeg forsøger at åbne filen i en beskyttet mappe, er nøjagtig den samme som når jeg åbner en fil i en mappe, hvor jeg har skrevet adgang.


Jeg har prøvet dette med de forskellige forskellige versioner af fopen (fopen, \_wfopen, \_wfopen\_s), men de har alle samme output.


Interessant nok returnerer GetLastError () ERROR\_ALREADY\_EXISTS.


Her er koden, som jeg bruger:


FILE *FileHandle; 
DWORD error = \_wfopen\_s(&FileHandle, L"\filename.txt", L"a");
Win32Error = GetLastError();

if (error != 0 || FileHandle == NULL)
{
    //Throw error
}
else 
{
    //write to file
    //close file
}


EDIT: Som det fremhæves, bliver filen oprettet i\% APPDATA\% på grund af virtualisering. Er der nogen der ved, hvordan du deaktiverer denne funktion? [5]

Bedste reference


Dette kan have at gøre med den virtuelle butik. Se her for nogle oplysninger. [6]

Andre referencer 1


Hvis du bogstaveligt talt kører koden, du har indsendt, så er du ikke i stand til at spørge om en fil i rodmappen. Du skal gå "c:\filename.txt" (to '\' tegn) i stedet. Måske hvis du kigger i Nuværende mappe, du finder dig, har succesfuldt oprettet en underligt navngivet fil (grundlæggende <formfeed>ilename.txt, tror jeg).

Andre referencer 2


Vi havde et lignende problem i registreringsdatabase virtualisering, ja det er også virtualiseret efter Vista.


Vores løsning var Egenskaber-> Linker-> Manifest fil-> UAC Execution Level-> RequireAdministrator . IMHO, det kan også fungere for din sag.