|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2005
Città: ... e dintorni
Messaggi: 175
|
[C++] Determinare Path Assoluto
Ciao a tutti, ho un "piccolissimo" problema con C++
Come faccio a determinare il path assoluto di un file di cui conosco solo il nome?? Grazieeeee
__________________
Firma in costruzione |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Dec 2007
Messaggi: 121
|
|
|
|
|
|
|
#3 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
semplicemente mettigli in testa il percorso completo della directory corrente, più lo slash se necessario:
Codice:
#include <cstdlib>
#include <cstdio>
#include <cerrno>
#include <iostream>
#include <string>
using namespace std;
#include <direct.h>
class CBuffer
{
private:
char *pszData;
size_t cbSize;
public:
CBuffer()
{
cbSize = 0x100;
pszData = new char[cbSize];
}
~CBuffer()
{
delete[] pszData;
}
operator char* ()
{
return pszData;
}
operator const char* () const
{
return pszData;
}
size_t GetSize() const
{
return cbSize;
}
void Reallocate()
{
delete pszData;
cbSize *= 2;
pszData = new char[cbSize];
}
};
int main()
{
string strFileName = "lal.txt";
CBuffer bufPath;
while (!getcwd(bufPath, bufPath.GetSize()))
{
if (errno != ERANGE)
{
cout << "error " << errno << endl;
return 1;
}
bufPath.Reallocate();
}
string strCurrentDirectory = (const char*)bufPath;
char chLast = strCurrentDirectory[strCurrentDirectory.length() - 1];
if ((chLast != '\\') && (chLast != '/'))
{
strCurrentDirectory += '\\';
}
cout << "full path: " << strCurrentDirectory << strFileName << endl;
return 0;
}
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Dec 2007
Messaggi: 121
|
oops ho letto male
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
Codice:
#ifdef __WIN32
# define TERMINATOR '\\'
#else
# define TERMINATOR '/'
#endif
/* ... */
if (chLast != TERMINATOR)
{
strCurrentDirectory += TERMINATOR;
}
/* ... */
![]() ciao P.S.: figo il nome "TERMINATOR", mi pare di vederci Arnold Schwarzenegger (Arnoldo Neronero).
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Oct 2005
Città: ... e dintorni
Messaggi: 175
|
Ancora un aiuto...
Come posso fare per elencare tutte le cartelle e le sottocartelle di una data directory? Ad esempio ottenere, data la cartella c:\, : C:\cartella1 C:\cartella2 C:\cartella1\cartella11 C:\cartella1\cartella12\cartella121 C:\cartella2\cartella21 . . . e così via...
__________________
Firma in costruzione |
|
|
|
|
|
#7 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
@Daniele: lo slash in avanti funziona anche su Windows; il contratto della getcwd di Microsoft non specifica che ti restituirà sempre e solo backslashes
|
|
|
|
|
|
|
#8 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
faccio notare che l'esempio che ho riportato nel link di MSDN è molto vecchio e non è scritto molto bene: se il codice del main venisse usato in una funzione diversa dal main si avrebbero dei leak.
inoltre l'esempio non è proprio quello che serve a te: dovresti anche trovare un modo per distinguere tra files e cartelle. edit - puoi usare questa funzione qua: http://msdn.microsoft.com/en-us/libr...52(VS.85).aspx forse c'è un modo più facile. Ultima modifica di 71104 : 02-10-2008 alle 12:25. |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Dipende da sistema operativo, sui sistemi Unix io direi opendir()+readdir() o ftw():
Codice:
#include <unistd.h>
#include <ftw.h>
int scan(const char *, const struct stat *, int);
int main()
{
if (ftw(".", scan, 42) != 0)
{
fprintf(" *** Errore!\n");
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
int scan(const char *path, const struct stat *si, int flags)
{
if (flags & FTW_D)
{
printf("%s\n", path);
}
return 0;
}
ciao
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
D'oh, non m'ero accorto che avessi già risposto!
Quote:
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:42.





















