Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di minoz
    Registrato dal
    Oct 2001
    Messaggi
    219

    [C] Dimensione di un file

    Come faccio ad ottenere la dimensione di un file in Byte?

  2. #2
    su *nix?

    man fstat




    credo sia l'unico modo
    cmq non mi pare ci siano nulla nelle librerie standard. questa è una syscall di *nix


  3. #3
    Credo che una combinazione di fseek con paramentro SEEK_END e di ftell Ti possano aiutare.la prima posiziona il puntatore a file alla fine,la seconda restituisce la posizione di tale puntatore in byte
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  4. #4
    Utente di HTML.it L'avatar di minoz
    Registrato dal
    Oct 2001
    Messaggi
    219
    codice:
    #include <windows.h>
    
    DWORD fileSize( char* percorsoFile )
    {
    	DWORD risultato;
    	WIN32_FIND_DATA FindFileData;
    	HANDLE hFind = INVALID_HANDLE_VALUE;
    
    	hFind = FindFirstFile( percorsoFile, &FindFileData );
    
    	//Se il file è valido
       	if (hFind != INVALID_HANDLE_VALUE)
       	{
    		risultato = GetFileSize( hFind, NULL);
                FindClose(hFind);
       	}
       	return risultato;
     }
    Non sono sotto Unix...
    Sto cercando di far funzionare questa, ma qualcosa non va! :master:
    HELP!

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Uhm... così?
    codice:
    int fileSize(char *f) {
       File *f;
       int c, d;
    
       if (f = fopen(f, "rb") == NULL) {
          cout << "Errore";
       }
    
       while (!feof(f)) {
          c = fread(f);
          d++;
       }
    
       fclose(f);
    
       return d-1;
    }
    Dovrebbe andare a meno di errori... Non ho controllato.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6

    x Win32

    codice:
     #include <windows.h>
    
     DWORD GetFileDimension( LPCSTR szFileName )
     {
       HANDLE hFile;
       DWORD  dwSize;
    
       hFile = CreateFile( szFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
    
       if ( !hFile )
         return ( -1 );
    
    
       dwSize = GetFileSize( hFile, NULL );
       CloseHandle( hFile );
    
       return ( dwSize );
     }
    
    
    
     ....
    
     GetFileDimension( "C:\\WINDOWS\\file.ext" );
    DYNAMIC+ [ E-mail ]

    Secondo me non si può fare!

  7. #7
    Utente di HTML.it L'avatar di minoz
    Registrato dal
    Oct 2001
    Messaggi
    219
    Originariamente inviato da LeleFT
    Uhm... così?
    codice:
    int fileSize(char *f) {
       File *f;
       int c, d;
    
       if (f = fopen(f, "rb") == NULL) {
          cout << "Errore";
       }
    
       while (!feof(f)) {
          c = fread(f);
          d++;
       }
    
       fclose(f);
    
       return d-1;
    }
    Dovrebbe andare a meno di errori... Non ho controllato.

    Ciao.
    Funziona ma è lentissimo se ho file grandi

  8. #8
    Utente di HTML.it L'avatar di minoz
    Registrato dal
    Oct 2001
    Messaggi
    219

    Re: x Win32

    Originariamente inviato da DYNAM!C+
    codice:
     #include <windows.h>
    
     DWORD GetFileDimension( LPCSTR szFileName )
     {
       HANDLE hFile;
       DWORD  dwSize;
    
       hFile = CreateFile( szFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
    
       if ( !hFile )
         return ( -1 );
    
    
       dwSize = GetFileSize( hFile, NULL );
       CloseHandle( hFile );
    
       return ( dwSize );
     }
    
    
    
     ....
    
     GetFileDimension( "C:\\WINDOWS\\file.ext" );
    PErfetto grazie!

  9. #9
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Originariamente inviato da unomichisiada
    Credo che una combinazione di fseek con paramentro SEEK_END e di ftell Ti possano aiutare.la prima posiziona il puntatore a file alla fine,la seconda restituisce la posizione di tale puntatore in byte
    Concordo che è meglio usare codice C standard, il C non è che ha una grande libreria, ma quel poco che offre perche non usarlo? Questa è una funzione che restituisce la dimensione in byte di un file:

    codice:
    long dim(const char* nomefile){
    	FILE * pFile = fopen (nomefile, "r");
    	if(pFile == NULL)
    		return 0;
    	fseek (pFile, 0, SEEK_END);
    	long size = ftell (pFile);
    	fclose (pFile);
    	return size;
    }

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  10. #10
    se il codice deve girare su uno specifico OS,
    è meglio usare le funzioni native del sistema
    come le api o gli interrupt.
    DYNAMIC+ [ E-mail ]

    Secondo me non si può fare!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.