datei aus verschiedenen Ordner einlesen

lukasxyz

Grünschnabel
Hallo
ich habe folgendes Problem
ich habe einen Ordner in dem 20 andere Ordner sind und in jedem von diesen 20 befindet sich eine Datei mit dem selben Name

ich möchte Daten aus diesen Ordner auslesen
weiss jemend wie man das machen kann?
 
Bist du nicht sicher, wie du die Pfade zusammensetzen kannst?
Eigentlich ist es nämlich egal, wo sich die Dateien befinden, die du öffnen willst; ebenso, wie sie heissen. Du musst nur entsprechend 20 Strings mit dem kompletten Pfad zu den jeweiligen Dateien zusammenbasteln - dann kannst du sie auch öffnen und einlesen.

Beispiel:
Code:
#include <string>

using std::string;
string Trenner = "\\";
string Hauptverzeichnis = string(  "c:"  ) + Trenner + "temp" + Trenner;
string Unterverzeichnisse[] = {  "a", "b", "c" } ; // nur 3 Unterverzeichnisse
string Dateiname = Trenner + "test.txt";

// alle Dateien ansprechen
for ( int i = 0; i < 3; ++i )
{
  // Aktuellen Pfad zusammensetzen
  string AktuellerPfad = Hauptverzeichnis +  Unterverzeichnisse[i] + Dateiname; 

  // Hier was mit der Datei machen (Öffnen, Löschen oder was auch immer)
}

Hilft dir das weiter?
 
ja also noch mal vielen Dank

im Prinzip soll das laufen, das einzige was ich nicht kriegen kann ist
der syntax:

FILE *a=fopen(*"AktuellerPfad","rt");

also wenn ich dass so schreibe dann läuft es nicht
 
FILE *a=fopen(*"AktuellerPfad","rt");
Wenn du eine Stringkonstante verwendest, mach kein '*' davor, dann sollte es gehen. Hier noch ein Beispielcode aus der MSDN Library:
Code:
/* FOPEN.C: This program opens files named "data"
 * and "data2".It  uses fclose to close "data" and
 * _fcloseall to close all remaining files.
 */

#include <stdio.h>

FILE *stream, *stream2;

void main( void )
{
   int numclosed;

   /* Open for read (will fail if file "data" does not exist) */
   if( (stream  = fopen( "data", "r" )) == NULL )
      printf( "The file 'data' was not opened\n" );
   else
      printf( "The file 'data' was opened\n" );

   /* Open for write */
   if( (stream2 = fopen( "data2", "w+" )) == NULL )
      printf( "The file 'data2' was not opened\n" );
   else
      printf( "The file 'data2' was opened\n" );

   /* Close stream */
   if( fclose( stream ) )
      printf( "The file 'data' was not closed\n" );

   /* All other files are closed: */
   numclosed = _fcloseall( );
   printf( "Number of files closed by _fcloseall: %u\n", numclosed );
}

Output

The file 'data' was opened
The file 'data2' was opened
Number of files closed by _fcloseall: 1
 
ja den Stern wollte ich natürlich nicht, aber ohne geht auch nicht

ich habe schon so was ausprobiert: und läuft nicht

string name = "c:\\temp\\33\\ergebnis";

FILE *a=fopen("name","rt");

wenn ich aber statt "name" den ganzen Pfad rein schreibe dann läuft´s
also ich bin nicht sicher aber irgendwie schluckt es dieses String nicht
das Beispiel kenne ich , aber es hilft nicht weiter, da überall steht fopen("data", "wt") und nicht fopen("AktuellerPfad","wt");
 
Zuletzt bearbeitet:
Ach so! Ist auch etwas verwirrend, weil mit dem std::string jetzt ja C++-Elemente dazugekommen sind. Versuch es mal so:

Code:
string name = "c:\\temp\\33\\ergebnis";

FILE *a=fopen( name.c_str(), "rt");

name.c_str() liefert einen Pointer auf die Zeichenkette zurück, die name verwaltet, also "c:\\temp\\33\\ergebnis". Der Pointer kann nur zum Lesen der Zeichenkette verwendet werden, nicht zum Ändern. Die Klasse std:string besitzt die Methode c_str(), um Kompatibilität mit in C geschriebenen Libraries usw. zu gewährleisten, da diese normalerweise einen Char-Pointer ( char* ) erwarten, wenn es um Text geht. So wie fopen(), zum Beispiel.
 
Zurück