PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : File Attributes in C ändern ?


Einfachkrank
2003-01-27, 18:59:41
Hi,

ich möchte ganz gerne mit einem Programm versteckte und schreibgeschützte Dateien finden können, die dann jeweils öffnen können und auch deren Attribute ändern können...
Wie bekomme ich das am einfachsten in C hin? (C++ ist auch OK, aber lieber wäre mir C :))

MFG Einfachkrank

gmuller44
2003-01-27, 20:12:16
was sind attribute?

Abe Ghiran
2003-01-27, 23:26:19
Hallo!

So wie ich das sehe (bin kein c guru, lerne das gerade erst), geht das nur mit Betriebssystemfunktionen, die c Standard lib hat da nichts zu bieten (oder ich hab's nicht gesehen ???).

Unter Windows gibt es zum lesen / setzen von Dateiattributen das Duo Get-/SetFileAttributes. Zum auflisten aller Dateien in einem Verzeichnis kann man FindFirstFile / FindNextFile benutzen.
Dazu ruft man FindFirstFile mit einem wildcard auf und benutzt dann das zurückgegebene SearchHandle, um dann mit FindNextFile nacheinander an die nächsten Dateien zu kommen. Die eigentlichen Daten der Suche (Name der gefundenen Datei, etc) landen dabei im übrigen immer in einem Struct WIN32_FIND_DATA, dessen Adresse man den Funktionen mitgibt.

Ich hoffe das hilft schon mal ein bißchen, vielleicht findet sich ja noch jemand der sich besser damit auskennt.

Grüße, Jan

Einfachkrank
2003-01-28, 16:11:06
Mhh... ??? Gut, ich werde mal sehen was ich hinbekomme, aber wenn dazu jemand noch mehr Wissen hergeben kann, wäre ich dankbar. Aber trotzdem Danke schon mal @Abe Ghiran

Abe Ghiran
2003-01-28, 19:14:29
Hallo noch mal ;)

Ich habe da mal eben was runtergeschrieben, was sich unter dev-c++ 4 sogar übersetzen lässt und wohl seinen Zweck erfüllt:


#include <stdio.h>
#include <windows.h>

int main(int argc, char *argv[])
{
HANDLE hsearch;
WIN32_FIND_DATA result; // hier landen die ergebnisse drin
int counter = 0;

// erster aufruf
hsearch = FindFirstFile("*", &result);

if(hsearch == INVALID_HANDLE_VALUE){
printf("Keine Datei gefunden!");
} else {
counter++;

// name ausgeben
printf("%d. Datei ist %s\n", counter, result.cFileName);

// in dwFileAttributes stecken die datei attribute
if(result.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
printf("Dies ist ein Verzeichnis.\n");
} else {
printf("Dies ist eine normale Datei.\n");
}

printf("\n");

// andere dateien jetzt mit findNextFile suchen
while(FindNextFile(hsearch, &result)){
counter++;
printf("%d. Datei ist %s\n", counter, result.cFileName);

// auch hier wieder die attribute checken
if(result.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
printf("Dies ist ein Verzeichnis.\n");
} else {
printf("Dies ist eine normale Datei.\n");
}

printf("\n");
}
}

return 0;
}


Ich hoffe das erklärt sich einigermäßen selbst, sonst einfach noch mal nachfragen.

Ähnlich wie ich nachgeschaut habe, ob das ein Verzeichnis ist kann man auch auf andere Attribute testen, z.b. hidden, write protected, etc. Das ist alles in der Win32 Hilfe zu WIN32_FIND_DATA beschrieben.
Du müsstest dann auf das Attribut deiner Wahl checken und ggf. ändern. Das geht mit SetFileAttributes (habe ich mir mal gespart).

Hui, cool, allmählich kapiere ich c immer besser :bäh:.

Grüße, Jan