Problem mit "fopen".



  • Poste doch mal bitte deinen ganzen Code....
    Denn das Stückchen, das du gepostet hast ist, wie schon geschrieben wurde, richtig.

    mfg grottenolm



  • Original erstellt von <Ball>:
    Der Zeiger liefert kein NULL-Wert zurück, aber er will die Datei
    einfach nicht öffnen.

    Wenn die Funktion kein NULL zurückliefert ist die Datei offen!

    [ Dieser Beitrag wurde am 15.06.2003 um 23:15 Uhr von Hepi editiert. ]



  • fragen wir doch einfach mal, was er angibt, vorzugeben, was passieren müsste?
    😉



  • #include <stdio.h>
    
    int main()
    {
     FILE *datei;
     /* Bitte Pfad und Dateinamen anpassen */
     datei = fopen("home/ball/test.txt","r"); 
     if(datei==NULL)
      {
       printf("Konnte Datei \"test.txt\" nicht öffnen!\n");
      }
    return 0;
    }
    

    Die Datei existiert und auch alles richtig geschrieben.

    Die Berechtigungen sind auch alles gesetzt.



  • Es ist alles richtig eingegeben.

    Das einzigste Problem ist, dass er die verdammte Datei nicht öffnen will 😞

    Ich hab echt kein Plan warum.

    Hab alles richtig eingegeben.



  • Komisch bei mir funzt das!

    Wenn Datei == NULL
    Konnte Datei nicht oeffnen

    Kann das sein das du die Darstellung meinst, die kann so nicht erfolgen!

    datei = fopen("text.txt", "r");
    while(!feof(datei))
    printf("%c",fgetc(datei));
    

    So bekommst du die Darstellung 🕶



  • @elise
    *ROFL* 😃

    @Ball
    Der Code erstellt nur einen Datei Deskriptor(ganzzahlige ID), mit dem du auf das entsprechende File zugreifen kannst.
    Wenn du zB. etwas auslesen willst, könntest du fgets verwenden. Wobei es natürlich auch andere Funktionen dafür gibt.

    char *fgets(char *s, int size, FILE *stream);
    

    man fgets
    Oder/und pronix.de

    datei = fopen("home/ball/test.txt","r");
    

    Hier fehlt übrigens das /...

    mfg grottenolm



  • Tatsache jetzt geht das 😕 😕

    Danke DarkYe 🙂



  • @grottenolm

    Jo, danke 🙂

    Und wieder ist man schlauer 🙂



  • arrg...das kommt davon, wenn man sich mitten im verfasssen des Postings 'ne Cola holt... 🙄



  • arrg...das kommt davon, wenn man sich mitten im verfasssen des Postings 'ne Cola holt...

    Eigentlich wars ne Fanta, aber egal 🙂



  • Mhhh, eigentlich meinte ich mich damit... 😉

    mfg grottenolm



  • Asso 🙄

    Nadann mal Guten Durst 🙂



  • Original erstellt von <grottenolm>:
    Der Code erstellt nur einen Datei Deskriptor(ganzzahlige ID), mit dem du auf das entsprechende File zugreifen kannst.

    Nope, der Code füllt eine Variable der Struktur FILE, wo mehr als nur der FD drin steht (EOF/Fehler-Flags, Adresse des Puffers, Pufferzeiger, Puffergröße, Position des Schreib-/Lesezeigers, FD). Bei systemnahen Funktionen wie open() wird nur ein FD zurück gegeben, aber nicht bei den ANSI-C - Funktionen.

    [ Dieser Beitrag wurde am 16.06.2003 um 09:51 Uhr von RTC editiert. ]



  • Es lag mir auf der Zunge 😉
    Aber egal...sorry für die teilweise falsche Information und danke für die Berichtigung... 😃

    mfg grottenolm



  • vielleicht keine zugriffrechte drauf auf die file?! soweit ich weiss hat er dann auch NULL zurückgegeben. ich such grad mal meinen code...

    ..gefunden! Also das ist meine source aus dem ersten semester, als ich ein programm schreiben sollte (unter HP UX), was ne Datei öffnet und auf den Bildschirm ausgibt. Such dir raus, was du brauchst. das prog lief...

    #include <stdio.h>
    
    int main (int argc, char *argv[])
    {
    
        char file[255], zeichen='\0';                               /*File bezeichnet den Dateinamen, zeichen, das jeweilige Zeichen aus der Datei*/
        static FILE *datei;                                 /*zum Datei öffnen*/
        int  zeilenanzahl=0,zeichenanzahl=-1,leerzeichen=0,bildschirmanzahl=1,status;
    
    /************************************************************************\
    * Wurde das Programm richtig aufgerufen und lässt sich die Datei öffnen? *
    \************************************************************************/
    
            if (argc != 2)                                  /*abfrage, ob richtiger Programmaufruf erfolgt ist*/
            {
                printf ("\nFalscher Programmaufruf!\n");
             printf ("Programm in dr Form ''a10 datei'' aufrufen!\n\n");
                return 1;
            }
    
            if ( ( sscanf(argv[1], "%s", &file) ) == 0)     /*"einlesen" des Dateinamens, von der Shell eingabe her, und abfrage ob das umwandeln in den entspr. dateinamen geklappt hat*/
            {
                printf ("Problem beim umwandeln!\n");
                return 2;
            }
    
            datei = fopen(file, "r+");                      /*datei wird geöffnet*/
    
            if (datei == (FILE *)0)                         /*abfrage ob öffnen geklappt hat*/
            {
                printf ("Fehler beim oeffnen der Datei!\n");
                return 3;
            }
    
            status = fscanf(datei,"%c", &zeichen);
    
    /*****************************\
    * Das eigentliche Programm... *
    \*****************************/
    
            while (status != EOF)                               /*Es werden so lange zeichen aus der Datei gelesen und ausgegeben, bis das dateiende (EOF) erreicht ist*/
            {
    
                    printf ("%c", zeichen);
                    status = fscanf(datei, "%c", &zeichen);                     /*Zeichen einlesen und den variablen "zeichen" und "status" zuweisen*/
    
                    if (zeichen == '\n')                           /*Wenn aktuelles Zeichen ein "Zeilenumbruch" ist --> Zeilenzahl hochzählen*/
                    {
                        zeilenanzahl+=1;
    
                        if (zeilenanzahl % 25==0 )               /*Wenn ein Bildschirm (25 zeilen) voll geschrieben ist --> auf Tastendruck warten und zahl der "Bildschirme" hochzählen*/
                        {
                            getchar();
                            bildschirmanzahl+=1;
                        }
                    }
    
                    if (zeichen == ' ')                         /*Wenn aktuelles Zeichen ein Leerzeichen ist --> als Leerzeichen zählen*/
                    {
                  leerzeichen+=1;
                }
    
                    zeichenanzahl+=1;                       /*Zeichenanzahl hochzählen, egal, welches Zeichen*/
    
            }
    
            printf("\n\nZeichen (ohne Leerzeichen): %d", zeichenanzahl-leerzeichen-zeilenanzahl);
          printf("\n\nZeichen (mit Leerzeichen): %d", zeichenanzahl-zeilenanzahl);
            printf("\n\nZeilen: %d\n\n", zeilenanzahl);
    
            fclose (datei);                                      /*die datei wird wieder geschlossen*/
        return 0;
    }
    


  • Jo danke CyberTim 🙂


Anmelden zum Antworten