Newsgroup: it.comp.lang.c++
Titolo: Path EXE

Come posso sapere la path di un file exe:
Esempio:
char *path;
path = GetPath("C:\Programmi\Borland\Pippo.exe");
// path == "C:\Programmi\Borland"
grazie
Riccardo

 // path == "C:\Programmi\Borland"
Da un tuo successivo post deduco che stai usando
il BCB. Se non sbaglio questo compilatore ti
mette a disposizione una funzione ad hoc:
ExtractFilePath (non sono sicurissimo del nome
prova a controllare nell'help in linea).
In C++ Standard una possibile soluzione
e` la seguente:
visto che c'e` di meglio degli array di char,
non vedo perche' non usarlo: la classe string.
#include <iostream>
#include <string>
using namespace std;
string GetPath(const string& VFileName)
{
  string::size_type pos = 0;
  pos=VFileName.find_last_of('\\');	
  if(pos!=string::npos)
   return VFileName.sub_str(0,pos+1);
  else
   return "No path available";
}
int main()
{
  string FileName;
  string FilePath;
  FileName="C:\\Programmi\\Borland\\Pippo.exe";
  FilePath=GetPath(FileName);
  cout<<"File name: "<<FileName<<endl;
  cout<<"File path: "<<FilePath<<endl;
  return 0;
}
-- 
Roberto Gerola
Email: 
roge...@tin.it
WWW: 
http://space.tin.it/computer/rgerola

::Rep::operator d
elete(void *)' called before definition
EMG

    return VFileName.sub_str(0,pos+1);
Il metodo sub_str() è un errore di battitura o è la libreria del DJGPP
ad essere obsoleta (contiene solo il metodo substr()).
EMG

 ad essere obsoleta (contiene solo il metodo substr()).
E` un errore di battitura.
Il metodo corretto e` proprio substr().
Grazie per la correzione.


 ad essere obsoleta (contiene solo il metodo substr()).
Errore di battitura, penso (la dizione nello standard e` substr).
Alex

warning: inline function [snipsnip] called before definition
Non e` un errore chiamare le funzioni inline prima di averle
definite, ma evidentemente gcc ritiene che sia "pericoloso".
Ad esempio:
    #include <iostream>
    class pippo {
    public:
        void ciao(int) { std::cout<<"ciao(int)\n"; }
        void ciaociao() { ciao('x'); }
        void ciao(char) { std::cout<<"ciao(char)\n"; }
    };
    int main() {
        pippo pip; pip.ciaociao(); return 0;
    }
Questo esempio deve a norma di standard scrivere
    ciao(char)
e personalmente non ci vedo nulla di sorprendente o
pericoloso; se togliessimo l'ultimo dei 3 metodi di
pippo, naturalmente, scriverebbe invece
    ciao(int)
Il fatto che il comportamento di pippo::ciaociao()
possa essere diverso a seconda di quanto la _segue_
nella definizione della classe (qui, perche` un miglior
match per l'overload di pippo::ciao() si trova dopo)
e` presumibilmente quello che gcc trova potrebbe
sorprenderti, e di cui quindi ti avverte.
Per eliminare questo warning puoi rinunciare allo
stile in cui le funzioni inline sono nel corpo della
classe, cambiando ad es. la pippo in:
    class pippo {
    public:
        inline void ciao(int);
        inline void ciaociao();
        inline void ciao(char);
    };
    void pippo::ciao(int) { std::cout<<"ciao(int)\n"; }
    void pippo::ciaociao() { ciao('x'); }
    void pippo::ciao(char) { std::cout<<"ciao(char)\n"; }
Qui di warning, si puo` sperare, non dovresti averne.
Ammetto che e` uno stile che si puo` preferire.
Naturalmente, se i warning ti arrivano relativamente
a header di sistema (che giustamente preferisci non
toccare), allora, "benvenuto al club!":-); se ricordi,
ne discutevamo proprio l'altro giorno...
Alex

 ne discutevamo proprio l'altro giorno...
Già, avevo parlato troppo presto... :-(
EMG