Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

41

20.08.2007, 15:35

nja muss bei opendir halt dein Verzeichnis angeben ... guck mal ob der überhaupt das Verzeichnis findet ... und ja du kannst es am ende mit operator[] ausgeben ... oder halt iterieren. Am einfachsten kannst de sowas aber per stream_iterator ausgeben ;)

C-/C++-Quelltext

1
copy(directories.begin(), directories.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
...
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

42

20.08.2007, 16:19

Komisch keine einzigste File wird ausgegeben so sieht der Code aus :

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
DIR* handle;
    struct dirent* entry;

    vector< string > directory_list(3);
     int count=0;
     std::string extension(".sav");

    handle = opendir( "Saves\\" );

    if ( !handle )
    {
        cerr << "Error: Verzeichnis konnte nicht gefunden werden!" << std::endl;
        return -1;
    }




   for (dirent* entry = readdir(handle); entry && directory_list.size() <= 3; entry = readdir(handle))
{
    std::string tmp_name(entry->d_name);
    if (tmp_name != "." && tmp_name != ".." && tmp_name.find_last_of(extension) == tmp_name.length() - extension.length())
        directory_list.push_back(tmp_name);
}



    closedir( handle );


Nun die ausgabe :

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
// Umlagerung 

string slot1 = directory_list[ 0 ];
  string slot2 = directory_list[ 1 ];
  string slot3 = directory_list[ 2 ];

// Ausgabe :


cout <<"  " << slot1 << "\t\n";
 cout <<"  " << slot2 << "\t\n";
cout <<"  " << slot3 << "\t\n";


Weiß jemand warum ... verzeichnis findet er auch sonst würde ja oben der error kommen !

MFG Toa

43

20.08.2007, 20:20

Das heißt nicht struct dirent ... das heißt dirent ... das count ist sinn frei usw.
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

44

20.08.2007, 20:26

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
DIR* handle;
    dirent* entry;

    vector< string > directory_list(3);

     std::string extension(".sav");

    handle = opendir( "Saves\\" );

    if ( !handle )
    {
        cerr << "Error: Verzeichnis konnte nicht gefunden werden!" << std::endl;
        return -1;
    }




   for (dirent* entry = readdir(handle); entry && directory_list.size() <= 3; entry = readdir(handle))
{
    std::string tmp_name(entry->d_name);
    if (tmp_name != "." && tmp_name != ".." && tmp_name.find_last_of(extension) == tmp_name.length() - extension.length())
        directory_list.push_back(tmp_name);
}



    closedir( handle );


Klappt imma noch net , es wird einfach nichts ausgegeben dann :/

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

45

20.08.2007, 23:58

Zitat von »"Deviloper"«

Das heißt nicht struct dirent ... das heißt dirent

Ich glaub, als Erbe von C ist es mitgeschleift worden, dass man struct btw. class bei einer Variablendefinition dabei stehn haben darf... wo auch immer es herkommt, verboten is es nicht.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

46

21.08.2007, 08:10

Zitat von »"grek40"«

Zitat von »"Deviloper"«

Das heißt nicht struct dirent ... das heißt dirent

Ich glaub, als Erbe von C ist es mitgeschleift worden, dass man struct btw. class bei einer Variablendefinition dabei stehn haben darf... wo auch immer es herkommt, verboten is es nicht.


So ist das!

@Topic: Gib doch mal zu Debugzwecken die Namen in der Schleife aus:

C-/C++-Quelltext

1
2
3
4
5
if (tmp_name != "." && tmp_name != ".." && tmp_name.find_last_of(extension) == tmp_name.length() - extension.length()) 
{
        std::cout << tmp_name << std::endl;
        directory_list.push_back(tmp_name); 
}


Dann siehst du ja ob deine Filteraktion nicht evtl zu viel ausfiltert!
@D13_Dreinig

47

21.08.2007, 14:29

Joa das ist zwar so ... aber wenn man einmal C++ programmiert, sollte man sich auch daran halten und nicht nur weil man da Funktionen die es so im C++-Standard nicht gibt, nutzt, und diese auf C basieren, unsauber werden.
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

48

21.08.2007, 21:34

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
   DIR* handle;
    dirent* entry;

    vector< string > directory_list(3);

     std::string extension(".sav");

    handle = opendir( "Saves\\" );

    if ( !handle )
    {
        cerr << "Error: Verzeichnis konnte nicht gefunden werden!" << std::endl;
        return -1;
    }




   for (dirent* entry = readdir(handle); entry && directory_list.size() <= 3; entry = readdir(handle))
{
    std::string tmp_name(entry->d_name);
    if (tmp_name != "." && tmp_name != ".." && tmp_name.find_last_of(extension) == tmp_name.length() - extension.length())
       {
        std::cout << tmp_name << std::endl;
        directory_list.push_back(tmp_name);
}
}


Komisch er geht zwar in die FOr schleife aber in die If nicht :/&

49

21.08.2007, 22:29

Das solltest du mal rebuilden ...
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

50

22.08.2007, 22:13

Ich verzeifel noch rebuilt hab ich schon klappt auch nicht hab jetzt zu debug zwecken eine ausgabe angefügt :

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
 for (dirent* entry = readdir(handle); entry && directory_list.size() <= 3; entry = readdir(handle))
{

    std::string tmp_name(entry->d_name);
    std::cout << tmp_name << std::endl;
    if (tmp_name != "." && tmp_name != ".." && tmp_name.find_last_of(extension) == tmp_name.length() - extension.length())
       {
        std::cout << tmp_name << std::endl;
        directory_list.push_back(tmp_name);
}
}


Die Ausgabe in der for schleife macht er aber in der If nicht .. d.h die namen werden nicht in die dict list eingetragen also if liefert kein True abba warum ?

Edit : Vielleicht liegts ja daran :

tmp_name.find_last_of(extension) == tmp_name.length() - extension.length())

Wenn ich die länge des savs (zb lala.sav) - dem .sav subtrahiere hab ich nicht .sav also tmp_name.find_last_of(extension) oder versteh ich was falsch ? ... *heul*

Werbeanzeige