Ho un problema (come al solito ), devo visualizzare la partizione sull'HD su cui è installato windows, tutto ovviamente da un programma in C.
Soluzioni?
Ho un problema (come al solito ), devo visualizzare la partizione sull'HD su cui è installato windows, tutto ovviamente da un programma in C.
Soluzioni?
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;
}
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.
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.
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.Originariamente inviato da Elmapomap
Parliamo dello stesso linguaggio nel tuo link si parla di C++ qui C
No MP tecnici (non rispondo nemmeno!), usa il forum.
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:
Ma ovviamente il debug da errore? Come si puo correggere?Codice PHP:
struct stat st;
if(stat("C:\WINDOWS",&st) == 0) {
char *paritizione_hd = 'C';
} else {
char *paritizione_hd = 'D';
}
[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:
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.Ma ovviamente il debug da errore? Come si puo correggere?Codice PHP:
struct stat st;
if(stat("C:WINDOWS",&st) == 0) {
char *paritizione_hd = 'C';
} else {
char *paritizione_hd = 'D';
}
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:
Per curiosità, a cosa ti serve sapere la partizione di Windows?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]);
Amaro C++, il gusto pieno dell'undefined behavior.
Mi sto esercitando essendo un novellino, ed il mio programmino và a modificare un file nativo nelle directory di Windows;Originariamente inviato da MItaly
Per curiosità, a cosa ti serve sapere la partizione 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.
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.