Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425

    [C++ Api Win32] spazio totale, occupato e libero del disco fisso

    come da titolo, ho cercado su msdn o sulle references ma non riesco a trovare delle api che mi diano queste informazioni sul disco fisso.

    Se qualcuno ha consigli mi fa un favore.


    Grazie ciao
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  2. #2
    ti da quello totale e libero (quello occupato te lo ricavi)


    GetDiskFreeSpaceEx
    DYNAMIC+ [ E-mail ]

    Secondo me non si può fare!

  3. #3
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    grazie mille

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  4. #4
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    ho trovato delle info è ho fatto un codice come questo:

    codice:
      DWORD dwSectorsPerCluster;
      DWORD dwBytesPerSector;
      DWORD dwNumberOfFreeClusters;
      DWORD dwTotalNumberOfClusters;
    
      GetDiskFreeSpace("C:\\", &dwSectorsPerCluster, 
                             &dwNumberOfFreeClusters,
                     	  &dwNumberOfFreeClusters,             
                            &dwTotalNumberOfClusters);
    ho provato a leggere un due veriabili ma non mi danno l'info che vedo io, quele sarebbe la variabile da leggere?
    Io ho pensato di dover ricavare facendo

    dwSectorsPerCluster*dwNumberOfFreeClusters*dwNumbe rOfFreeClusters

    ma da un valore errato.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Allora:
    codice:
    TotalSpace = dwTotalNumberOfClusters * dwSectorsPerCluster * dwBytesPerSector;
    FreeSpace = dwNumberOfFreeClusters * dwSectorsPerCluster * dwBytesPerSector;
    UsedSpace = TotalSpace - FreeSpace;

  6. #6
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    mi ritorna 2.147.155.968 ma io ho 4,87 G di spazio libero.

    Come faccio a convertire nel valore corretto? Prima ho pensato che quello fosse il valore in bytes, ma in bytes ho 5.231.001.600 bytes



    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  7. #7
    usa GetDiskFreeSpaceEx e non GetDiskFreeSpace, insomma la versione Extended, perche' quella retrocompatibile con NT3.51, bhe fi ferma a 2Gb di capacita' massima
    DYNAMIC+ [ E-mail ]

    Secondo me non si può fare!

  8. #8
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Ah, vero... anche prima avevi scritto la versione extended!

    Durante le ricerche su come implementare ho perso un pezzo


    Ora ho solo un ultimo problema di compatibilità dei tipi di dato sembra: l'operatore << non riesce a scrivere il formato ULARGE_INTEGER o __int64, provo vari cast ma non riconosce la conversione di tipo; mostro il codice:

    codice:
    unsigned __int64  getFreeSpace() {
        __int64 freeSpace, totalSpace, totalFreeSpace;
    
        GetDiskFreeSpaceEx( "C:\\", (PULARGE_INTEGER) freeSpace,
    		                      (PULARGE_INTEGER) totalSpace,
    							  (PULARGE_INTEGER) totalFreeSpace);
    
    	return freeSpace;
    }
    quando faccio il test con

    codice:
    ofstream a("a.txt");
    a << getFreeSpace();
    dice che << è ambiguo.

    Se faccio un cast con ULARGE_INTEGER non lo riconosce, riesco solo a castare in PULARGE_INTEGER che però essendo il puntatore ritorna l'indirizzo e se lo dereferenzio nuovamente l'errore di cast unsupported.

    grazie a tutti per il vostro aiuto.


    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  9. #9
    io farei cosi

    struct QWORD
    parentesi
    DWORD loDword;
    DWORD hiDword;
    end-parentesi;


    ....

    QWORD freeSpace, totalSpace, totalFreeSpace;

    GetDiskFreeSpaceEx( "C:\\", (PULARGE_INTEGER) &freeSpace.....


    ora dovresti poter fare il

    cout << freeSpace.hiDword << freeSpace.loDword;
    DYNAMIC+ [ E-mail ]

    Secondo me non si può fare!

  10. #10
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    non ci avevo pensato a fare una struttura in quel modo, effetivamente così stampa il tipo di dato anche l'operatore <<, il problema è che da dati sfasati, è colpa proprio di << sia su file sia su standard output su monitor(una message box neanche si visualizza).

    Al momento ho dovuto fare un piccolo "sacrificio" e usare funzioni C in un programma C++, ma era previsto nel progetto usare anche C, ho fatto così:

    codice:
    ...
    FILE* file = fopen("a.txt", "w");
    
    fprintf(file, "%I64d\n", getSpace(TOTAL));
    fprintf(file, "%I64d\n", getSpace(USED));
    fprintf(file, "%I64d\n", getSpace(FREE));
    
    fclose(file);
    ...

    codice:
    ...
    const int FREE = 1;
    const int TOTAL = 2;
    const int USED = 3;
    ...
    unsigned __int64  getSpace(int use) {
    
    __int64 lpFreeBytesAvaibleToCaller, lpTotalNumberOfBytes, lpTotalNumberOfFreeBytes;
    
    GetDiskFreeSpaceEx("C:\\", (PULARGE_INTEGER)&lpFreeBytesAvaibleToCaller, 
    				   (PULARGE_INTEGER) &lpTotalNumberOfBytes, 
    (PULARGE_INTEGER) &lpTotalNumberOfFreeBytes);
    
    
    __int64 space = NULL;
    
    switch(use) {
    case FREE:
    	space = lpTotalNumberOfFreeBytes;
    	break;
    case USED:
    	space = lpTotalNumberOfBytes - lpTotalNumberOfFreeBytes;
    	break;
    case TOTAL:
    	space = lpTotalNumberOfBytes;
    	break;
    }
    
    return space;
    }
    ...

    grazie a tutti per l'aiuto
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

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 © 2025 vBulletin Solutions, Inc. All rights reserved.