• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Bląd przy tworzeniu wielu plików

+1 głos
701 wizyt
pytanie zadane 6 maja 2018 w C i C++ przez FaloY Bywalec (2,180 p.)
zamknięte 6 maja 2018 przez FaloY

Witam, mam problem z "algorytmem" ma on za zadania utworzyć 7 dokumentów tekstowych. Lecz niestety nie działa ;d

	for (int i = 0; i < 8; ++i)
	{
		buffer[i]++;//nazwa plikow
		strcat(buffer, ".txt");//dodaje roserzenie
		fstream file[i];
		
		file[i].open(buffer);
		if (file[i])
		{
			file[i] << i << endl;
		}
		file[i].close();
	}

A dokładnie nie działa to: 

file[i].open(buffer);

Wstawiam obraz erroru: 

>terminate called after throwing an instance of  'std::ios_base::failure'

what(): basic_ios::clear

 

This applictaion has requested the Rutnime to terminate it in on unusual way .

Please contact the application's support team for more informations

Dziękuję za każdą pomoc! Regards ;D

komentarz zamknięcia: Problem rozwiązany.
komentarz 6 maja 2018 przez Szahid Pasjonat (20,970 p.)
Zakładam że bufer jest jakąś tablicą charów albo stringiem. i Że w lini 3 chcesz podwyższyć inedeks nazwy pliku o 1? Np masz nazwa0, nazwa1, nazwa2 itd?
komentarz 6 maja 2018 przez draghan VIP (106,230 p.)

@FaloY - pokaż, czym dokładnie jest buffer.

komentarz 6 maja 2018 przez Szahid Pasjonat (20,970 p.)

@FaloY, Sprawdź jeszcze za pomoicą file.open() czy plik w ogóle się otwiera zanim zaczniesz z niego czytać

komentarz 6 maja 2018 przez FaloY Bywalec (2,180 p.)

@draghan,


char buffer[MAX_PATH];

GetCurrentDirectory(MAX_PATH, buffer);
SetCurrentDirectory(buffer);

Proszę bardzo

3 odpowiedzi

+1 głos
odpowiedź 6 maja 2018 przez j23 Mędrzec (195,220 p.)
wybrane 6 maja 2018 przez FaloY
 
Najlepsza

Chyba o to Ci chodziło:

ostringstream oss;

oss << "nazwa pliku" << i << ".txt";

ofstream file(oss.str().c_str());

 

komentarz 6 maja 2018 przez draghan VIP (106,230 p.)

Można też bez zaprzęgania strumienia:

std::string filename;
filename = "nazwa pliku" + std::to_string(i) + ".txt";
ofstream(filename);

 

+1 głos
odpowiedź 6 maja 2018 przez monika90 Pasjonat (22,940 p.)
edycja 6 maja 2018 przez monika90

W C++ rozmiar tablicy automatycznej musi być stałą o wartości znanej już podczas kompilacji, u Ciebie jest to zmienna i.

Nawet jeżeli kompilator ma niestandardowe rozszerzenie i akceptuje zmienną jako rozmiar tablicy, to tablica o rozmiarze i nie ma elementu o indeksie i, a ty próbujesz się do niego odwołać. W szczególności, gdy tablica ma rozmiar zero, to w ogóle nie ma elementów. Po co Ci w ogóle ta tablica???

Wreszcie, używasz fstream zamiast ofstream, czyżbyś miał zamiar robić odczyt i zapis jednocześnie?

0 głosów
odpowiedź 6 maja 2018 przez Qwerty96 Stary wyjadacz (13,580 p.)
fstream file[i];

Co to za konstrukt? Czemu próbujesz tworzyć tablicę obiektów std::fstream?

Podobne pytania

–1 głos
4 odpowiedzi 641 wizyt
pytanie zadane 19 listopada 2015 w C i C++ przez dawids14 Nowicjusz (150 p.)
0 głosów
1 odpowiedź 1,912 wizyt
pytanie zadane 17 września 2016 w C i C++ przez Unidentified Początkujący (260 p.)
0 głosów
0 odpowiedzi 736 wizyt

93,742 zapytań

142,678 odpowiedzi

323,297 komentarzy

63,328 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...