Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [C] Visualizzare partizione di Windows

    Ho un problema (come al solito ), devo visualizzare la partizione sull'HD su cui è installato windows, tutto ovviamente da un programma in C.

    Soluzioni?

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    Non è delle migliori

    Sicuramente esistono librerie specializzate ma potresti tentare con la FindFirstFile, te lo dico perchè in questo momento stò cercando di usare questa per un programma e quindi la sto studiando. Cmq con questa potresti cercare il file regedit.exe (per esmpio) o altri file tipici di windows: una cosa del genere. Ovviamente nel codice tutto dipende dal nome della partizione per questo il programma non è stabilissimo.

    Codice PHP:

    #include <iostream>

    #include <windows.h>


    using namespace std;



    char path;
    HANDLE  hFind;
    WIN32_FIND_DATA wfd;


    int main()
    {


    char unita "C";

    path "C:\\programdata";//programdata è una cartella tipica di windows


    cout<<"Locazione di memoria: ";
    cout<<hFind;
    cout<<"\nNome ";
    char *lp wfd.cFileName;
    cout<<lp;
    cout<<"\nPercorso  ";
    cout<<path;
    cout<<" ";
    //DeleteFile (path);

    if((int)hFind==0xffffffff)cout<<"\nWindows non e' stato trovato in "<<unita;//quando non trova la cartella program data
    else cout<<"\nWindows e' stato trovato in "<<unita;
    cin.get();
    return 
    0;


  3. #3
    Scusa.. non me intendo molto di C.
    In tutti i casi ho pensato che sarebbe meglio visualizzare l'esistenza di
    C:\WINDOWS o di D:\WINDOWS etc.. e restituirne la partizione se esiste .
    In tutti i casi ri-quotando quanto sopra detto non ne sarei in grado di fare neanche cosi.

  4. #4
    Per ottenere la directory di Windows c'è l'apposita funzione GetWindowsDirectory. Una volta ottenuto il percorso, ti basta troncarlo ai due punti per ottenere la partizione.
    Evita di seguire strade che si basano su presupposti come "è una cartella tipica di Windows", "di solito sta lì", ..., dato che in diverse versioni/localizzazioni/installazioni di Windows i percorsi delle cartelle "comuni" possono cambiare (vedi windows / winnt, Users / Documents and settings / %windir%\Profiles, Programmi / Program files, system / system32, ...); per ottenerne i percorsi usa sempre le apposite API (per le shell folders, in particolare, c'è la SHGetSpecialFolderPath).
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Parliamo dello stesso linguaggio nel tuo link si parla di C++ qui C

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Originariamente inviato da Elmapomap
    Parliamo dello stesso linguaggio nel tuo link si parla di C++ qui C
    Va bene comunque ... è una API di Windows ... leggi la documentazione per usarla.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Ok di sicuro quella è un'ottima soluzione: fin troppo per me.
    Sono novellino nel C, come in ogni altro linguaggio di programmazione, utilizzare le API ora mi sembra troppa ardua come impresa!.
    Avevo pensato ad qualcosa tipo:

    Codice PHP:
       struct stat st;

       if(
    stat("C:\WINDOWS",&st) == 0) {
            
    char *paritizione_hd 'C';
         } else {
            
    char *paritizione_hd 'D';
         } 
    Ma ovviamente il debug da errore? Come si puo correggere?

  8. #8
    [QUOTE]Originariamente inviato da Elmapomap
    Ok di sicuro quella è un'ottima soluzione: fin troppo per me.
    Sono novellino nel C, come in ogni altro linguaggio di programmazione, utilizzare le API ora mi sembra troppa ardua come impresa!.

    Avevo pensato ad qualcosa tipo:
    Codice PHP:
       struct stat st;

       if(
    stat("C:WINDOWS",&st) == 0) {
            
    char *paritizione_hd 'C';
         } else {
            
    char *paritizione_hd 'D';
         } 
    Ma ovviamente il debug da errore? Come si puo correggere?
    In primo luogo, partizione_hd andrà dichiarato fuori dall'if e sarà un char (e non char*), oppure il valore ad esso assegnato dovrà essere una stringa e non un singolo carattere. Inoltre semmai cercherai "c:\\windows" o "d:\\windows", senza il backslash se no la ricerca avviene nella directory corrente del disco specificato.

    In ogni caso come metodo per determinare la partizione di Windows è davvero pessimo, infatti fallisce miseramente su qualunque versione di Windows NT o su Windows 2000 (dove la directory di Windows è WINNT), sulle installazioni di Windows "doppie" sulla stessa partizione, sulle installazioni di Windows situate su altre partizioni oltre a c e d, su installazioni in cui Windows è installato sia su c: che su d: e in generale su installazioni di Windows la cui cartella non è c:\windows o d:\windows; non mi sto inventando niente, sono tutti casi che ho visto direttamente.

    Ribadisco, la soluzione corretta è richiamare l'API GetWindowsDirectory, che non è per niente difficile da usare:
    codice:
    #include <windows.h>
    
    /* ... */
    
    char directoryWindows[MAX_PATH];
    UINT ret;
    ret=GetWindowsDirectory(directoryWindows, sizeof(directoryWindows));
    if(ret>sizeof(directoryWindows))
        puts("Buffer di dimensioni insufficienti");
    else if(ret==0)
        printf("GetWindowsDirectory non riuscita; codice di errore: %u\n",GetLastError());
    else
        printf("La directory di Windows si trova sul disco %c.",directoryWindows[0]);
    Per curiosità, a cosa ti serve sapere la partizione di Windows?
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Originariamente inviato da MItaly
    Per curiosità, a cosa ti serve sapere la partizione di Windows?
    Mi sto esercitando essendo un novellino, ed il mio programmino và a modificare un file nativo nelle directory di Windows;
    E' un file liberamente modificabile;
    Attraverso gli input presi da scanf esso da l'opportunità di modificare il file.

    EDIT:

    In tutti i casi non so perchè, anche se funzionando il programma alla fine dell'esecuzione si blocca, facendo errore.

  10. #10
    Be', ma quindi non ti serve sapere la partizione di Windows, ma appunto la sua cartella. A maggior ragione, quel che ti serve è la GetWindowsDirectory; in alternativa, puoi ottenere questa informazione dalla variabile di ambiente %windir%. Se poi non vuoi stare ad impazzire per i concatenamenti di percorsi, potresti studiarti le Lightweight Shell API relative ai percorsi.
    Amaro C++, il gusto pieno dell'undefined behavior.

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.