ifstream und struct dirent *entry;
-
Hallo,
ich lese eine Verzeichnisliste mitstruct dirent *entry;
hdir = opendir("/Users/edwin/Desktop/tmp/floppies/convert/");entry = readdir(hdir);ein.
Ich kann eine Verzeinisliste auch ausgeben (zzgl while schleife).
cout << (*entry).d_name << endl;
Wenn ich allerdings etwas versuche wie:
ifstream file(entry->d_name);
if (!file)
cout << "Error";Erhalte ich Error zurück.
Wie kann ich denn dieses hier
struct dirent *entry;
in eine Variable vom Typ umwandeln.
Gruss
EJ
-
1. Was ist opendir/readdir? Das ist mal sicher kein Standard C++.
2. Mit einem Filestream, kann man ein File, also eine Datei lesen, aber sicher kein Verzeichnis.
3.Wie kann ich denn dieses hier
struct dirent *entry;
in eine Variable vom Typ umwandeln.
Keine Ahnung was dirent für ein struct ist. Sieht nach einem C-Konstrukt aus, wenn du struct davor schreibst, denn das ist in C++ nicht nötig. Und in welchen Typ willst du es umwandeln?
Grüssli
-
forum lag
-
Hallo,
danke für die Antwort.1. Was ist opendir/readdir? Das ist mal sicher kein Standard C++.
Dient dazu in einem Ordner alle Dateien anzeigen zu lassen. Zum Thema Standard "considered "pseudo-standard" and is reliably portable between platforms" Siehe auch:
http://en.wikipedia.org/wiki/Dirent.h
2. Mit einem Filestream, kann man ein File, also eine Datei lesen, aber sicher kein Verzeichnis.
Das stimmt natürlich. In dem Verzeichnis befinden sich allerdings Dateien (bis auf . und ..). Diese Dateien möchte ich nach einander ansprechen.
----
#include <iostream>
#include <fstream>
#include <dirent.h>using namespace std;
int main()
{
DIR *hdir;
struct dirent *entry;
hdir = opendir("/your/path");
string zeile;
do
{
entry = readdir(hdir);
if (entry)
{
cout << (*entry).d_name << endl;
}
ifstream file(entry->d_name);
if (!file)
cout << "Error";
do {
getline(file, zeile);
cout << zeile << "Test" << endl;
}
while ( file.eof() );
}
while (entry);closedir(hdir);
}
----Ich möchte es in einen Typ umwandeln, den ich mit ifstream verwenden kann. Also char wäre gut, string geht auch. Ich habe auch schon probiert die Information welche Dateien sich in einem Verzeichnis befindet mit getline in den Griff zu bekommen. Geht alles nicht.
-
Was bedeutet das? Bin erst seit heute hier angemeldet.
-
Ok, danke für den Wikipedia-Artikel. Dann ist
dirent.haber ein Pseudo-Standard für C. Wir sind hier aber in C++, dürfte ich daher vielleicht eine alternative in C++ vorschlagen? Die Bibliothek ist nämlich so ein Pseudo-Standard für C++
http://www.boost.org/
Bzw. für dein Problem dann dies:
Boost.FilesystemWie dirent.h funktioniert, habe ich keine Ahnung. Ich würde auch nicht C-Funktionen mit C++ mischen. Entweder in C oder aber in C++ programmieren.
Forum lag bedeutet, dass das Forum momentan ein paar Aufhänger hat. Die Admins und Mods arbeiten daran und haben bereits einiges verbessert. Das Forum wird halt langsam ein wenig gross

Grüssli