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

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

31

19.08.2007, 22:20

Hab noch mal eine Frage zu dem Thema , ich möchte jetzt nur files in den Vector lesen die die Endung .sav haben , hab es so umgesetzt :

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
vector< string > directory_list(3);
 int count=0;

 while ( 0 != (entry = readdir( handle ) ) && count < 3)
    {

        if(strcmp(entry->d_name, ".") == 0 ||
        strcmp(entry->d_name, "..") == 0)
        if((directory_list[ 0 ].substr(directory_list[ 0 ].length() - 4) !=       ".sav") == 0)
// Das mit allen 3 Elementen 

        continue;
        directory_list[count++]= entry->d_name;
    }


Leider geht die Konsole auf dann erscheint sehr schnell dieser Text:

Quellcode

1
2
This application has requested the Runtime to terminate it in an
unusual way. Please contact the application´s support Team for more Informations.


und sie geht wieder zu :/ Hat wer ne Ahnung warum ?

32

19.08.2007, 22:27

C-/C++-Quelltext

1
2
3
4
5
6
7
std::vector<std::string> vec_files;
std::string extension(".sav");
for (std::vector<std::string>::iterator it = vec_files.begin(); it != vec_files.end(); ++it)
{
    if ((*it).find_last_of(extension) != (*it).length() - extension.length())
        vec_files.erase(it);
}
oder einfach std::remove_if...
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

33

19.08.2007, 22:28

Haste das auch als für mich das nur 3 Files aus dem Verzeichnis eingelesen werden ? Also 3 Files mit der Endung .sav die anderen nicht ? Weil das Problem ist ja wenn man das mit dem COunt macht geht er 3 mal durch und wenn ein Nicht .sav dabei ist , sind trotzdem am ende alle 3 durchgänge voll, verstehe wie ich meine ?

34

19.08.2007, 22:34

jop ;)

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
vector< string > directory_list(3);
entry = readdir( handle );
for (std::size_t item = 0; item < directory_list.size() && entry != NULL; ++item, entry = readdir(handle))
    if(strcmp(entry->d_name, ".") != 0 || strcmp(entry->d_name, "..") != 0)
    {
        std::string tmp(entry->d_name);
        
        if (tmp.substr(tmp.length() - 4) ==  ".sav")
            directory_list.push_back(entry->d_name);
    }
...
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

35

19.08.2007, 22:39

Thx =)

Aber ich versteh es einfach nicht die Konsole schließt sich einfach wieder und dieser Error Code wird ausgegeben :/ .

Liegt es vielleicht daran das er versucht 3 Files einzulesen sich aber nur 2 mit .sav im Verzeichnis befinden und die andere ein anderer Ordner ist.

Bin echt Ratlos , geht sogar nicht mit deinem COde :/
*Schnief*

EDIT : AUch wenn das Verzeichnis Save leer ist kommt der Error ::/

MFG Toa

36

20.08.2007, 14:25

also musse mal das ganze programm zeigen ...
um dir die Fehler in deinem Code mal zu erläutern:

C-/C++-Quelltext

1
directory_list[ 0 ].substr(directory_list[ 0 ].length() - 4)
behinhaltet die meisten Fehler ... 1. nimmst du immer das 1. Element im Vector und somit würde jede Datei nach der 1., die nicht "." oder ".." heißt, deinem Vector hinzugefügt! Und zum anderen ist beim 1. mal, bei dem nicht "." oder ".." in entry->d_name steht, der Inhalt von directory_list[0] == "" ... weil du den Wert erst nach der Abfrage zuweißt ...
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

37

20.08.2007, 14:36

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <dirent.h>
#include <string>
#include <vector>

DIR* handle = opendir("C:\\");
if (handle == NULL)
    return false;

std::vector<std::string> directories(3);
std::string extension(".sav");

for (dirent* entry = readdir(handle); entry && directories.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())
        directories.push_back(tmp_name);
}

closedir(handle);
... sollte aber gehen. Davon abgesehen, natürlich, dass das C-Funktionen sind!
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

38

20.08.2007, 14:54

Jetzt liest er gar keine files mehr ein xD , aber die Konsole bleibt wenigstens offen ^^. Aber woran liegt es das keine FIles mehr eingelesen werden ?
Vielleicht daran das :

Er einmal durchgeht dann ist es ein "."
er nocheinmal durchgeht dann ist es ".."
er nochmal durchgeht dann ist es ein Ordner

und nun 3 mal durch ist und nichts weiteres einliest ! oder ?

39

20.08.2007, 15:19

nein ... er geht jetzt solange durch, bis 3 Dateien in directories eingetragen wurde(s. directories.size() <= 3) ...
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

40

20.08.2007, 15:24

Komisch werden aber dann nicht ausgegeben oder kann man sie dann nicht mehr so ausgeben ?

Quellcode

1
std::cout << directory_list[ 0 ];


bzw directories <-- so hast du es genannt


weil ich speicher danach die eingelesenen files in anderen strings zum umlagern und die gebe ich dann aus ( also die slots gebe ich aus)

Quellcode

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

MFG Toa

Werbeanzeige