| Autor |
Nachricht |
BlubieKK
Unregistrierter
|
BlubieKK Unregistrierter
16:58:12 20.01.2012 Titel: |
C: Herausfinden ob Datei oder Verzeichnis |
Zitieren |
Hallo, ich benötige für ein Programm die Information, ob es sich bei einer Datei um ein Verzeichnis oder eine Datei handelt. Ich finde dazu leider nur das Attribut d_type im struct dirent (in dirent.h). Allerdings ist das Plattformabhängig.
Wie kann ich das denn sonst noch prüfen? |
|
|
|
 |
SeppJ
Moderator
Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 13604
|
SeppJ Moderator
17:02:01 20.01.2012 Titel: |
|
Zitieren |
Das ist nur plattformabhängig möglich. |
|
|
|
 |
BlubieKK
Unregistrierter
|
BlubieKK Unregistrierter
17:15:25 20.01.2012 Titel: |
|
Zitieren |
d_type gibt es bei mir leider nicht und ich weiß nicht, wie ich das sonst noch überprüfen kann. |
|
|
|
 |
BlubieKK
Unregistrierter
|
BlubieKK Unregistrierter
17:16:55 20.01.2012 Titel: |
|
Zitieren |
Oder einfach opendir() und probieren, ob kein NULL pointer zurückgegeben wird Wäre das nicht universell? |
|
|
|
 |
pyhax
Mitglied
Benutzerprofil
Anmeldungsdatum: 22.11.2011
Beiträge: 581
|
pyhax Mitglied
17:17:42 20.01.2012 Titel: |
|
Zitieren |
Gibt es den auf allen Systemen opendir? |
_________________ Ich kann (teilweise): C++, Python, Java(ist lange her), PHP, D (Anfänger)
|
|
 |
SeppJ
Moderator
Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 13604
|
SeppJ Moderator
17:19:17 20.01.2012 Titel: |
|
Zitieren |
Und wie wäre es, wenn du uns mal verraten würdest, welche(s) System(e) das Ziel sein soll(en)? |
|
|
|
 |
BlubieKK
Unregistrierter
|
BlubieKK Unregistrierter
17:20:14 20.01.2012 Titel: |
|
Zitieren |
Ja, das ist eine Funktion aus dem Standard-Library. Aber das würde doch funktionieren, oder? |
|
|
|
 |
BlubieKK
Unregistrierter
|
BlubieKK Unregistrierter
17:22:05 20.01.2012 Titel: |
|
Zitieren |
Ubuntu und Solaris oder allgemein Unix-Systeme |
|
|
|
 |
C++ Forumbot
Forumbot
Benutzerprofil
Anmeldungsdatum: 29.02.2004
Beiträge: 16160
|
C++ Forumbot Forumbot
17:38:24 20.01.2012 Titel: |
|
Zitieren |
|
 |
Wutz
Mitglied
Benutzerprofil
Anmeldungsdatum: 15.04.2010
Beiträge: 2103
|
Wutz Mitglied
17:41:20 20.01.2012 Titel: |
|
Zitieren |
|
 |
SeppJ
Moderator
Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 13604
|
SeppJ Moderator
17:42:45 20.01.2012 Titel: |
|
Zitieren |
| BlubieKK schrieb: | | Ja, das ist eine Funktion aus dem Standard-Library. Aber das würde doch funktionieren, oder? | Nein, das ist eine Funktion aus der POSIX-Bibliothek. Ist zwar eng mit der Standardbibliothek verwachsen, gibt es aber nicht überall.
| BlubieKK schrieb: | | Ubuntu und Solaris oder allgemein Unix-Systeme | Dann igbt es opendir. Und die Antwort auf deine Ursprungsfrage ist stat:
stat(2) |
|
|
|
 |
BlubieKK
Unregistrierter
|
BlubieKK Unregistrierter
18:01:07 20.01.2012 Titel: |
|
Zitieren |
Ok, das hat jetzt soweit hin:
| C/C++ Code: | struct stat * infoBuf;
filePath = "./test.txt";
int statusK = lstat(filePath, infoBuf);
| |
| C/C++ Code: | struct stat * infoBuf;
filePath = "./test.txt";
int statusK = lstat(filePath, infoBuf);
| |
| C/C++ Code: | struct stat * infoBuf;
filePath = "./test.txt";
int statusK = lstat(filePath, infoBuf);
| |
statusK ist immer = -1. Ich weiß nicht warum. Ich habe schon alle möglichen Pfadangaben versucht aber das ändert nichts |
|
|
|
 |
SeppJ
Moderator
Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 13604
|
SeppJ Moderator
18:17:29 20.01.2012 Titel: |
|
Zitieren |
1. Dein infoBuf zeigt ins Nirwana.
2. Wenn du -1 als Rückgabewert bekommst, dann werte doch mal errno aus.
3. Da du mit infoBuf schon Mist gemacht hast, frag ich besser nach: Was genau ist filePath? |
Zuletzt bearbeitet von SeppJ am 18:18:38 20.01.2012, insgesamt 1-mal bearbeitet |
|
 |
Shiba
Mitglied
Benutzerprofil
Anmeldungsdatum: 26.09.2002
Beiträge: 199
|
Shiba Mitglied
14:24:20 21.01.2012 Titel: |
|
Zitieren |
_stat(Windows) bzw stat (Posix) ist schon richtig.
Unter Windows und Unix kann man damit die File-Eigenschaftn erhalten.
In der Struktur stat gibt gibt es das Member st_mode.
Und über das das Flag _S_IFDIR (Windows) oder die Posix (UNIX) Funktion S_ISDIR() bekommt man raus ob es ein Directory ist.
=> Windows | C/C++ Code: | | if( stat.st_mode & _S_IFDIR) | |
| C/C++ Code: | | if( stat.st_mode & _S_IFDIR) | |
| C/C++ Code: | | if( stat.st_mode & _S_IFDIR) | |
=> Unix | C/C++ Code: | | S_ISDIR(stat.st_mode) | |
| C/C++ Code: | | S_ISDIR(stat.st_mode) | |
| C/C++ Code: | | S_ISDIR(stat.st_mode) | |
Ansonsten gilt das 7. Gebot des C-Proggers
Thou shalt study thy libraries and strive not to reinvent them without cause, that thy code may be short and readable and thy days pleasant and productive.
Wie ich grade sehe hat SeppJ ja schon so schön auf die manpage zu stat verlinkt.
Das sage ich nur: 2. |
Zuletzt bearbeitet von Shiba am 14:28:23 21.01.2012, insgesamt 2-mal bearbeitet |
|
 |