Datei im Programme-Ordner speichern



  • Also ich möchte gerne, dass das Programm eine Datei erzeugt und diese dann im Programme-Ordner speichert, doch er macht es nicht. Ich habe schon folgende Pfadangaben versucht, doch keine nützt etwas:

    C:\Programme\... (Die Punkte stehen für Unterverzeichnisse, die hier aber unwichtig sind, denke ich.)
    C:\Program Files\...

    und da ich 64bit habe auch noch...

    C:\Programme(x86)\...
    C:\Program Files(x86)\...

    Ich habe Windows 7 Professional und auch wenn ich das Programm mit administrativen Rechten starte nützt es nichts.

    Wenn der Satndardpfad nicht gewünscht ist fragt das Programm nach einem alternativen Pfad (wenn fälschlicherweise '/' geschrieben wird, dann wird es durch ein '\' ersetzt), der dann von der Tastatur eingelesen wird und wenn ich zum Beispiel den Desktop angebe funktioniert es auch, aber in solche Systemverzeichnisse will er nichts reinschreiben.

    Zudem habe ich noch eine weitere Frage:

    Wenn der Pfad von der Tastatur eingelesen wird, kann ich dann bevor die Datei reingeschrieben wird prüfen, ob der Pfad überhaupt existiert und ggf. eine Fehlermeldung ausgeben?



  • %programfiles%



  • fp = fopen("C:\%programfiles%\...","wt");

    Also so geht's schonmal nicht. Ohne die \\ geht's auch nicht. Es sei wohlgemerkt, dass ich 2 Programmeordner habe: Programme und Programme(x86). In diesem Fall will ich das in x86 haben, aber auch gerne wissen wie ich das in den "normalen" Programmeordner bekomme.



  • schau doch mal ob da was für dich dabei steht

    https://forum.opsi.org/viewtopic.php?f=7&t=1131

    lg lolo



  • Entweder blicke ich da nur nicht durch was da steht oder da steht tatsächlich nichts was mir weiterhilft.



  • Jolka schrieb:

    fp = fopen("C:\%programfiles%\...","wt");

    wozu C:\\ ?



  • ^^sieht nach zickereien mit den zugriffsrechten aus. ändere die rechte für den ordner auf 'vollzugriff' für 'Jeder'. und alle bestehenden rechte aus der ACL löschen, auch für system und administrator. sonst könnten verbote deinen vollzugriff weder einschränken.
    btw, das rechtesystem unter windoof ist ein einziger krampf, deshalb arbeiten auch alle so gern als admin. *fg*
    🙂



  • hi

    Einfach mal C lernen !
    Dann sind solche Fragen sowas von überflüssig !
    Und eine Datei öffnen aus einem Verzeichniss wie zbsp: "C:\foto\bild.jpg" das geht nich weil der backslash vom compiler als escape sequenz angesehen wird !.

    So sollte das aussehen:
    <code>
    FILE *ptr;

    ptr = fopen("c:\\foto\\bild.jpg" ,"r+b");
    if(ptr==NULL){
    printf("Datei konnte nicht geöffnet werden !");
    }

    ..
    ...
    </code>

    Dabei sollte gesagt werden das die zugriffsrechte gegeben sein müssen !

    lowbyte



  • 11101 schrieb:

    hi

    Einfach mal C lernen !
    Dann sind solche Fragen sowas von überflüssig !

    Sehr nett.

    Und eine Datei öffnen aus einem Verzeichniss wie zbsp: "C:\foto\bild.jpg" das geht nich weil der backslash vom compiler als escape sequenz angesehen wird !.

    Wo hab ich \ statt \\ als Code geschrieben? Den Pfad habe ich im Anfangspost ganz normal und nicht als Code geschrieben. In meinem Quelltext ist das schon richtig mit dem Backslash.

    So sollte das aussehen:
    <code>
    FILE *ptr;

    ptr = fopen("c:\\foto\\bild.jpg" ,"r+b");
    if(ptr==NULL){
    printf("Datei konnte nicht geöffnet werden !");
    }

    ..
    ...
    </code>

    Ich will keine bereits vorhandene Datei lesen, sondern eine Datei erstellen und nur prüfen, ob der Pfad vorhanden bzw. korrekt ist. Ob die Datei da schon liegt oder nicht ist uninteressant.

    ;fricky schrieb:

    ^^sieht nach zickereien mit den zugriffsrechten aus. ändere die rechte für den ordner auf 'vollzugriff' für 'Jeder'. und alle bestehenden rechte aus der ACL löschen, auch für system und administrator. sonst könnten verbote deinen vollzugriff weder einschränken.
    btw, das rechtesystem unter windoof ist ein einziger krampf, deshalb arbeiten auch alle so gern als admin. *fg*
    🙂

    Gut, das würde das Problem bei mir persönlich lösen. Aber ich würde das Programm auch gerne als Problemlösung für andere zum Download anbieten (das Programm spuckt eine gefixte Datei aus, damit in einem etwas älteren Spiel die Grafikdarstellung auf neuerer Hardware korrekt funktioniert). Es wäre einfach schicker, wenn die Datei direkt im richtigen Ordner landet, anstatt dass man die dann nachher erst selber reinlegen muss.



  • Jolka schrieb:

    ...ich würde das Programm auch gerne als Problemlösung für andere zum Download anbieten...

    😃



  • Lass dir doch die Fehlermeldung anzeigen, guckst du:

    #include <stdio.h> 
    #include <string.h> // strerror
    #include <errno.h> // errno
    int eret ( char* e ) {
    	if (e)
    		fprintf ( stderr, "%s\n", e ); // Eigene Fehlermeldung.
    	else
    		fprintf ( stderr, "%s\n", strerror (errno) ); // Systemfehlermeldung.
    	return 1;
    }
    int main() { 
    	FILE* fp = NULL;
    	char buf[1024] = {0}; 
    	char* fname = "test.txt";
    	char*  env_var = "ProgramFiles"; 
    	char* path = NULL;
    	if ( NULL == ( path = getenv ( env_var )))
    		return eret ("Diese Umbebungsvariable gibt es nicht "
    											"in deinem System, Bruder!");
    	_snprintf ( buf, sizeof(buf)-1, "%s\\%s", path, fname );
    	if ( NULL == ( fp = fopen ( buf, "a+b")))
    		return eret(NULL);
        fclose(fp);
     	return 0;
    }
    

Anmelden zum Antworten