[C++] Problema con system() e Netbeans [RISOLTO]
Ciao a tutti.
Ho un problemino con la funzione system su windows. Il codice è
Il mio problema è che le prime due chiamate di system funzionano mentre l'ultima restituisce l'errore di dos
Mi sapete dire perchè? Penso che sia un problema del sistema e non del codice per questo ho aggiunto alle PATH di sistema la directory in cui si trova gsview32.exe....ma non è servito. La cosa strana è che se faccio partire il programma da linea di comando funziona, mentre da dentro all'IDE (uso Netbeans) mi da quell'errore....forse il problema è proprio Netbeans, se così fosse mi sapreste consigliare un buon IDE alternativo?
Grazie in anticipo.
Ho un problemino con la funzione system su windows. Il codice è
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> using namespace std; int main () { string cmd2 = "ipconfig"; // mostra la configurazione ip system(cmd2.c_str()); string file12open="c:\\testo.txt"; // apre il file testo.txt con il notepad string cmd1 = "notepad " + file12open; system(cmd1.c_str()); string file2open="c:\\plot.ps"; // apre plot.ps con gsview32 string cmd = program2call + file2open; system(cmd.c_str()); cout << cmd << endl; return 0; }
Il mio problema è che le prime due chiamate di system funzionano mentre l'ultima restituisce l'errore di dos
"gsview32" non è riconosciuto come comando interno o esterno, un programma eseguibile o un file batch.
Mi sapete dire perchè? Penso che sia un problema del sistema e non del codice per questo ho aggiunto alle PATH di sistema la directory in cui si trova gsview32.exe....ma non è servito. La cosa strana è che se faccio partire il programma da linea di comando funziona, mentre da dentro all'IDE (uso Netbeans) mi da quell'errore....forse il problema è proprio Netbeans, se così fosse mi sapreste consigliare un buon IDE alternativo?
Grazie in anticipo.
Risposte
Probabilmente il searchpath è sbagliato/mancante. Prova a mostrarlo, dallo stesso programma che hai fatto (comando set o comando path), vedrai manca qualcosa.
[ Ma usare il path completo non ti va bene? ]
[ Ma usare il path completo non ti va bene? ]
Forse NetBeans ridefinisce la variabile d'ambiente PATH. Non ho il plugin di NetBeans per sviluppare in C/C++, ma secondo me dovresti guardare nelle opzioni del progetto.
Grazie a tutti!
@Rggb
Già provato...non funziona.
@apatriarca
Non ho trovato nulla che assomigli a quello che mi suggerisci.
@Rggb
Già provato...non funziona.
@apatriarca
Non ho trovato nulla che assomigli a quello che mi suggerisci.
forse e dico solo forse, usare le librerie solo proprie del C++, cioè senza lo standard del C con gli header .h
stdio.h in c++ mi sembra sia cstdio.
da provare.
stdio.h in c++ mi sembra sia cstdio.
da provare.
"alle.fabbri":
Il mio problema è che le prime due chiamate di system funzionano mentre l'ultima restituisce l'errore di dos
Le prime due chiamate sono funzioni di windows, pertanto i relativi file eseguibili sono all'interno delle classiche cartelle windows, e quindi presenti nel path.
La terza chiamata si tratta di un programma "non windows" pertanto ti conviene inserire il percorso completo del programma.
Se apri il "command prompt" ed esegui manualmente quella chiamata, vedrai che ti dara' lo stesso errore.
Nelle proprietà del progetto, sotto la voce Run, c'è la proprietà Environment. Prova a definire un nuovo path lì.
Grazie apatriarca. Funziona!!!
Ho editato il titolo.
@apatriarca
Nice shot.
@alle.fabbri:

Certo, mi rimane un dubbio: come mai non funziona con il path completo? Mi sembra molto strano.
Nice shot.
@alle.fabbri:
"Rggb":Visto?
Probabilmente il searchpath è sbagliato/mancante.

Certo, mi rimane un dubbio: come mai non funziona con il path completo? Mi sembra molto strano.

Non ne ho idea... Per farti capire meglio, se chiamo
mi restituisce l'errore di dos
però si vede che è solo un problema di Netbeans (risolto da apatriarca...) perchè se eseguo il programma da linea di comando o da win funziona.
In ogni caso ragazzi....che delirio programmare....
system("C:\\Programmi\\gsview32") // supponendo che questa sia la path di gsview32.exe
mi restituisce l'errore di dos
"C:\Programmi" non è riconosciuto come comando interno o esterno, un programma eseguibile o un file batch.
però si vede che è solo un problema di Netbeans (risolto da apatriarca...) perchè se eseguo il programma da linea di comando o da win funziona.
In ogni caso ragazzi....che delirio programmare....
scusa ma l'errore non è perchè scrivi la path in modo sbagliato.
la suddivisione testuale del file system di win, utilizza la singola "\"
la suddivisione testuale del file system di win, utilizza la singola "\"
Ma per inserire una singola '\' in una stringa in C è necessario inserirne due. È forse invece possibile usare '/'.
"alle.fabbri":
Non ne ho idea... Per farti capire meglio, se chiamo
system("C:\\Programmi\\gsview32") // supponendo che questa sia la path di gsview32.exe
mi restituisce l'errore di dos
"C:\Programmi" non è riconosciuto come comando interno o esterno, un programma eseguibile o un file batch.
Può essere, mi torna: system() probabilmente ha bisogno del file naming convertito nel formato compatibile (a-la-DOS, per intendersi) quindi il path di cui sopra sarà in realtà C:\PROGRA~1\gsview.exe (assumo che il naming sia questo, puoi vedere qual è da prompt, con il comando dir). Prova pure.
@apatriarca
Non credo accetti il carattere "/" per lo stesso motivo sopra detto (ma può anche essere).
Io credo che l'errore sia un altro. È possibile che NetBeans esegua il programma in un "ambiente protetto". In cui non sia cioè possibile accedere a qualsiasi cartella del sistema, ma solo ad alcune.
Però se fosse come tu dici mi aspetterei un errore differente... conclusione: boh. Tutto può essere nello strano mondo di \$Finestre\$

"Rggb":
Però se fosse come tu dici mi aspetterei un errore differente... conclusione: boh. Tutto può essere nello strano mondo di \$Finestre\$
NetBeans appartiene più che altro al mondo Java e non è del tutto compatibile con gli strumenti di sviluppo nativi di Windows (usa cygwin oppure mingw attraverso msys). Non è quindi proprio colpa del sistema operativo di Microsoft in questo caso. Gli IDE nativi di Windows (come Visual Studio o C++ Builder) o anche quelli multipiattaforma come Code::Blocks non dovrebbero avere questo genere di problemi.
Io consiglio vivissimamente di non utilizzare funzioni non multipiattaforma quando non è strettamente necessario farlo. La funzione system è qualcosa da aborrire!