Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: Linux/Unix ::  C: Herausfinden ob Datei oder Verzeichnis     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
BlubieKK
Unregistrierter




Beitrag 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
Beitrag SeppJ Moderator 17:02:01 20.01.2012   Titel:              Zitieren

Das ist nur plattformabhängig möglich.
BlubieKK
Unregistrierter




Beitrag 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




Beitrag 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
Beitrag 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
Beitrag 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




Beitrag 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




Beitrag 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
Beitrag C++ Forumbot Forumbot 17:38:24 20.01.2012   Titel:              Zitieren

Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (C89 und C99) in das Forum Linux/Unix verschoben.

Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?


Dieses Posting wurde automatisch erzeugt.

_________________
Besuchen Sie unsere Bücherecke.
http://www.c-plusplus.de/bucher.php
Mit jeder Bestellung unterstützen Sie das Forum.
Wutz
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.04.2010
Beiträge: 2103
Beitrag Wutz Mitglied 17:41:20 20.01.2012   Titel:              Zitieren

Wenn es nur für Unix-Systeme sein soll, braucht es nicht plattformunabhängig sein.

http://www.c-plusplus.de/forum/p2002433#2002433

_________________
Java, the best argument for Smalltalk since C++. -- Frank Winkler
SeppJ
Moderator

Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 13604
Beitrag 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




Beitrag 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
Beitrag 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
Beitrag 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
C/C++ Forum :: Linux/Unix ::  C: Herausfinden ob Datei oder Verzeichnis   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.