Dateiinformationen auslesen



  • Sebi09 schrieb:

    Danke für die Antworten!

    Kann mir jemand eine Seite empfehlen, wo man in C grundsätzlich nach Bibliotheken, Funktionen nachschlagen kann?

    http://www.cplusplus.com/reference/clibrary/ is ganz schoen.

    Peace C0de4Fun



  • C0de4Fun schrieb:

    Sebi09 schrieb:

    Danke für die Antworten!

    Kann mir jemand eine Seite empfehlen, wo man in C grundsätzlich nach Bibliotheken, Funktionen nachschlagen kann?

    http://www.cplusplus.com/reference/clibrary/ is ganz schoen.

    Peace C0de4Fun

    cstdio soll zur C-Bibliothk gehören? Ist ja ein Ding, noch nie davon gehört.



  • supertux schrieb:

    C0de4Fun schrieb:

    Sebi09 schrieb:

    Danke für die Antworten!

    Kann mir jemand eine Seite empfehlen, wo man in C grundsätzlich nach Bibliotheken, Funktionen nachschlagen kann?

    http://www.cplusplus.com/reference/clibrary/ is ganz schoen.

    Peace C0de4Fun

    cstdio soll zur C-Bibliothk gehören? Ist ja ein Ding, noch nie davon gehört.

    Each header file has the same name as the C language version but with a "c" prefix and no extension. For example, the C++ equivalent for the C language header file <stdlib.h> is <cstdlib>.



  • Hi,

    ich komme hier gerade mit meinem Progrämmchen nicht weiter. Die main Methode bekommt einen Dateinamen (z.B. test.txt) übergeben. Später soll sie von dieser Datei versch. Dateiinformationen ausgeben.

    #include <stdio.h>
    #include <string.h>
    #include <sys/stat.h>
    
    int main(int argc, char *argv[])
    {
    	printf("argv = %s\n", argv[1]);
    	return 0;
    }
    

    Wie wendet man die Funktion stat() an? Die von C0de4Fun gepostete Referenz ist mir hier nicht wirklich hilfreich, da die von mir benötigten Funktionen nicht erklärt werden.



  • Hi,

    www.cplusplus.com/forum schrieb:

    chiwing (152)
    what is the API of getting a file last edit time?

    thanks
    |
    writetonsharma (694)
    use stat()

    for windows specific:
    GetFileInformationByHandle()

    oder so
    MSDN
    kann aber sein das, das dann nur mit dem MS Compiler geht ka.

    Peace C0de4Fun



  • C0de4Fun schrieb:

    Hi,

    www.cplusplus.com/forum schrieb:

    chiwing (152)
    what is the API of getting a file last edit time?

    thanks
    |
    writetonsharma (694)
    use stat()

    for windows specific:
    GetFileInformationByHandle()

    oder so
    MSDN
    kann aber sein das, das dann nur mit dem MS Compiler geht ka.

    Peace C0de4Fun

    "use stat" ist schön unt gut, aber wie?!?



  • Sebi09 schrieb:

    Wie wendet man die Funktion stat() an? Die von C0de4Fun gepostete Referenz ist mir hier nicht wirklich hilfreich, da die von mir benötigten Funktionen nicht erklärt werden.

    Hi,
    so z.B:

    #include <time.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <stdio.h>
    
    int main( void )
    {
       struct _stat buf;
       char timebuf[64] = {0};
       char* fname = "test.txt";
    
    	if (_stat( fname, &buf ))
    	{
    		printf("%s not found.\n", fname );
    		return 0;
    	}
    
        printf( "File size: %ld\n", buf.st_size );
        printf( "Drive: %c:\n", buf.st_dev + 'A' );
    	if ( 0 == ctime_s ( timebuf, sizeof(timebuf)-1, &buf.st_mtime ))
    		printf( "Time modified: %s", timebuf );
    ...
    

    Gibts wohl auch für Linux, braucht man glaub ich noch die "unistd.h".
    Guckst du z.B. auch MSDN, da gibt es zu den meisten Funktionen Beispiele (meist weiter unten auf der Seite):
    http://msdn.microsoft.com/en-us/library/14h5k7ff(VS.80).aspx

    Ein bisschen mehr Portabilität kriegste mit Macros hin:

    #define WINDOWS
    
    #ifndef WINDOWS
    	#define LINUX
    #endif
    
    #ifdef WINDOWS
    	#define mstat _stat
    #endif
    
    #ifdef LINUX
    	#define mstat stat
    	#include <unistd.h> // z.b.
    #endif
    
    int main( void )
    {
       struct mstat buf; // my stat :)
       char* fname = "test.txt";
    
    	if ( mstat ( fname, &buf ))
    	{
    		printf("%s not found.\n", fname );
    		return 0;
    	}
    
    }
    


  • btw.

    Sebi09 schrieb:

    Die von C0de4Fun gepostete Referenz ist mir hier nicht wirklich hilfreich, da die von mir benötigten Funktionen nicht erklärt werden.

    warum hilft dir das nicht? Wenn du bei der Suche "stat" eingibts kommen doch einige hilfreiche Forenbeitraege oder ned?

    Peace & Blessed Love C0de4Fun



  • Sowohl in dem Beispiel-Programm von msdn, als auch in dem von anwend0r geposteten Code kommt folgender Fehler:

    crt_stat.c: In function ‘main’:
    crt_stat.c:13: error: storage size of ‘buf’ isn’t known
    crt_stat.c:17: error: ‘errno_t’ undeclared (first use in this function)
    crt_stat.c:17: error: (Each undeclared identifier is reported only once
    crt_stat.c:17: error: for each function it appears in.)
    crt_stat.c:17: error: expected ‘;’ before ‘err’
    crt_stat.c:43: error: ‘err’ undeclared (first use in this function)
    crt_stat.c:47: warning: incompatible implicit declaration of built-in function ‘exit’
    


  • welchen compiler hast du?
    hast du alle includes drübergepackert?

    #include <time.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <stdio.h>



  • Dieses Problem ist mittlerweile gelöst; uid und gid werden von meinem Progrämmchen ausgegeben. Nun möchte ich uid und gid mittels getpwuid() und getgrgid() in einen Namen umwandeln. Das komische Problem, das ich dabei habe: Mit getgrgid() lässt sich mittels gid problemlos der Gruppenname ermitteln. Wenn ich aber das gleiche auf die uid anwende (mittels getpwuid), bekomme ich folgende Fehlermeldung:

    myprogram.c:33: error: invalid type argument of ‘->’ (have ‘int’)
    

    Hier der entsprechende Code-Ausschnitt:

    printf("%-8s  ", getpwuid(dirfilebuf.st_uid)->pw_name); //funktioniert nicht
    printf("%-8s  ", getgrgid(dirfilebuf.st_gid)->gr_name); //funktioniert einwandfrei
    

    Mir ist das einfach nur rätselhaft 😡



  • #include <pwd.h>
    

    ps. langsam wirds lächerlich 🙄



  • hack0r schrieb:

    #include <pwd.h>
    

    ps. langsam wirds lächerlich 🙄

    ups. ja. 😮
    danke!


Anmelden zum Antworten