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

Program nie zapisuje danych do pliku mimo braku błędów

Object Storage Arubacloud
0 głosów
230 wizyt
pytanie zadane 31 lipca 2016 w C i C++ przez Patryk Łazowski Początkujący (270 p.)
Witam. Program nie pokazuje żadnego błędu i poprawnie odczytuje dane z pliku, jednak w żaden sposób nie chce nic do owego pliku zapisać. To mój pierwszy program korzystający z zewnętrznych plików, więc tym trudniej znaleźć mi (zapewne oczywisty) błąd.
#define _CRT_SECURE_NO_WARNINGS


#include <fstream>
#include <iostream>
#include <conio.h>
#include <string>
#include <ctime>

int main()
{
	std::fstream plik;
	plik.open("C:\\Users\\patryk\\Desktop\\TEST.txt", std::ios::in);
	bool good;
	bool is_open;
	if (plik.good() == true)
	{
		std::cout << "Wszystko jest OK" << std::endl;
		std::string dane;
		plik >> dane;
		std::cout << dane << std::endl;
		plik.close();

		int main1();
		{
			plik.open("C:\\Users\\patryk\\Desktop\\TEST.txt", std::ios::out | std::ios::app);
			time_t czas;
			time(&czas);
			char * data = ctime(&czas);
			std::string napis = data;
			int C = napis.size();
			int G = sizeof(data) * C;
			std::cout << "Rozmiar daty : " << G << std::endl;
			std::cout << "data" << data << std::endl;
			getline(std::cin, napis);
			plik.write( & napis[ G ], napis.length() );
			plik.close();
		}
	}
	else std::cout << "Coś poszło nie tak :/" << std::endl;
	_getch();
	exit(0);
}

 

1 odpowiedź

+2 głosów
odpowiedź 31 lipca 2016 przez obl Maniak (51,280 p.)

Ja nie mam pojęcia, co ty chcesz uzyskać w tym programie, ale niech ci będzie:

        plik.open("C:\\Users\\patryk\\Desktop\\TEST.txt", std::ios::out | std::ios::app);
		if(plik.is_open()){
			time_t czas;
			time(&czas);
			char * data = ctime(&czas);
			std::string napis = data;
			int C = napis.size();
			int G = sizeof(data) * C;
			std::cout << "Rozmiar daty : " << G << std::endl;
			std::cout << "data" << data << std::endl;
			std::cout << "Podaj jakiś tekst: ";
			getline(std::cin, napis);
			plik.write( napis.c_str(), napis.length() );
			plik.close();
		}else{
			std::cout<<"Coś nie tak";
		}

Zmieniona została linijka:

          plik.write( & napis[ G ], napis.length() );

która po wpisaniu wartości, co dzieje się w linii:

            getline(std::cin, napis);

powoduje błąd i zamknięcie programu.

Dodałem również sprawdzanie, czy plik został poprawnie otworzony (bo go otwierasz drugi raz)..

komentarz 31 lipca 2016 przez Patryk Łazowski Początkujący (270 p.)
Zmieniłem kod tak jak napisałeś, jednak nadal nic nie zapisuje się w pliku, a w kwestii przeznaczenia, plik ręcznie wstawiłem do rejestru, tak by uruchamiał się przy starcie systemu. Następnie odczytuje poprzednią datę włączenia systemu i powinien zapisać aktualną. W ten sposób wiem, czy ktoś logował się na mój komputer bez mojej wiedzy.
komentarz 31 lipca 2016 przez obl Maniak (51,280 p.)

Ten program nie zapisuje daty, on czeka aż wpiszesz coś z klawiatury, jak to zatwierdzisz to zapisuje to co wpisałeś do pliku. Musisz coś wpisać, wcisnąć enter i wtedy program zapisze to co ma do zapisania. Tak, co prawda napisałeś program, który wyświetla datę na ekranie, ale tej daty nie zapisuje do pliku. Musisz zmienić kod żeby program to robił.

komentarz 1 sierpnia 2016 przez Patryk Łazowski Początkujący (270 p.)

Aha, ale nawet jak wpisywałem coś do tego programu, notatnik pozostawał pusty. A wracając do daty można jakoś pominąć wpisywanie tekstu tak by wpisywał tam datę ( wiem że można zrobić to w następujący sposób :

plik << data

jednakże przy tej możliwości zapisze chyba tylko do spacji, co niewiele mi da)?

komentarz 1 sierpnia 2016 przez obl Maniak (51,280 p.)
		plik.clear();
		plik.open("C:\\Users\\patryk\\Desktop\\TEST.txt", std::ios::out | std::ios::app);
		if(plik.is_open()){
			time_t czas;
			time(&czas);
			char * data = ctime(&czas);
			std::string napis = data;
			int C = napis.size();
			int G = sizeof(data) * C;
			std::cout << "Rozmiar daty : " << G << std::endl;
			std::cout << "data" << data << std::endl;
			//std::cout << "Podaj jakiś tekst: ";
			//getline(std::cin, napis);
			plik.write( napis.c_str(), napis.length() );
			plik.close();
		}else{
			std::cout<<"Coś nie tak";
		}

Teraz powinno być dobrze i powinno zapisywać do pliku datę.

komentarz 2 sierpnia 2016 przez Patryk Łazowski Początkujący (270 p.)
Niestety plik nadal pozostaje pusty.
komentarz 5 października 2016 przez bartolinciu Dyskutant (7,580 p.)
Moim zdaniem zapisze całość, nie jestem pewien, bo aktualnie nie mam jak sprawdzić, ale ty możesz spróbować. Co ci szkodzi? Jeden test więcej czy mniej co za różnica

Podobne pytania

0 głosów
1 odpowiedź 303 wizyt
0 głosów
0 odpowiedzi 176 wizyt
0 głosów
1 odpowiedź 260 wizyt
pytanie zadane 12 lipca 2019 w C i C++ przez wieczor9 Początkujący (370 p.)

92,571 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,959 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...