Absturz beim Aufruf der Funktion filelength() bei open()



  • Guten Abend zusammen.
    Ich bin mal wieder etwas am Programmieren und bin verzweifelt.
    Ich möchte die Größe aller Dateien in einem Ordner auslesen. Dies wollte ich mit der Funktion open() und filelength() machen die ich hier gefunden habe
    http://www.c-plusplus.net/forum/255898

    Hier mal der für mich interessante Teil:

    int file = open(argv[1], O_RDONLY), filesize = filelength(file);
    printf("%d\n", filesize);
    close(file);
    

    Das Problem ist nun, dass es immer Abstürzt sobald ich die Länge ermitteln will.

    int filesize = filelength(file);
    

    Mein Verdacht ist das er vom Ordner "/.." nicht die Größe bestimmen kann und deshalb abstürzt. Sonst kann ich es mir nicht erklären.
    Das System mit dem ich arbeite ich Windows 7.

    Ich hoffe das mir mal einer Licht ins dunkel bringen kann.

    Edit: Welchen Rückgabewert hat die Datei wenn sie geöffnet werden konnte bzw wenn sie nicht geöffnet werden konnte?

    Guß Andyman


  • Administrator

    Das ist weder Standard C++ noch C.
    Willst du in C oder C++ programmieren? Oder etwas anderes?

    Grüssli



  • Ich habe vor in C++ zu programmieren.
    Etwas anderes habe ich in der kurzen Zeit nicht gefunden deshalb wollte ich mich daran versuchen.



  • Für Windows:

    #include <Windows.h>
    
    void showFiles(const char *path)
    {
      WIN32_FIND_DATA filedata;
      HANDLE hFind = FindFirstFile(path, &filedata);
      if (hFind != INVALID_HANDLE_VALUE)
      {
        do {
          if (filedata.dwFileAttributes & ~FILE_ATTRIBUTE_DIRECTORY)
          {
            printf("File: %s, size: %llu\n", filedata.cFileName, 
              ((unsigned long long)filedata.nFileSizeHigh * (MAXDWORD+1)) + filedata.nFileSizeLow);
          }
        } while (FindNextFile(hFind, &filedata));
      }
    }
    
    int main() 
    {
      showFiles("*");
      return 0;
    }
    

    http://msdn.microsoft.com/en-us/library/aa364418(v=vs.85).aspx
    Ich glaube mit Standard-C++ kann man sich nicht alle Dateien auflisten lassen. (Edit: Man könnte vielleicht alle Namen durchtesten. 🤡 )


Anmelden zum Antworten