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

Tworzenie za kazdym razem nowego pliku

Object Storage Arubacloud
0 głosów
494 wizyt
pytanie zadane 28 sierpnia 2018 w C i C++ przez MatZyN Początkujący (350 p.)
Witam!

Piszę program który ma zapisywać dane w pliku .txt i nie wiem jak zrobić żeby program nie nadpisywał pliku tylko tworzył nowy plik. Z góry dzieki za pomoc
1
komentarz 28 sierpnia 2018 przez RafalS VIP (122,820 p.)

nie nadpisywał pliku tylko tworzył nowy plik

zapisuj pliki o różnych nazwach :P Np z datą i czasem stworzenia pliku 

komentarz 28 sierpnia 2018 przez MatZyN Początkujący (350 p.)
Tak o to mi chodzi
komentarz 29 sierpnia 2018 przez Kacper Sas Dyskutant (8,460 p.)
Tak jak wspomniał RafalS. Biblioteka ctime, korzystasz z localtime i wybierasz sobie najważniejsze dane, składasz w stringa, gotowe :) Przykład na cpp0x w dokumentacji.
komentarz 29 sierpnia 2018 przez JAKUBW Nałogowiec (33,470 p.)
edycja 29 sierpnia 2018 przez JAKUBW

Jeżeli korzystasz z Visual Studio lub innego IDE wspierającego nowego C++ możesz użyć takiej funkcji:

#include <filesystem>
#include <chrono>
#include <string>

std::string create_unique_file(const std::string& path, const std::string& prefix, const std::string& postfix) {

#if defined(WIN32) || defined(_WIN32) 
    std::string path_and_prefix =
        (!path.empty() && *path.rbegin() != '\\' ? (path + "\\") : (path)) + prefix;
#else
    std::string path_and_prefix =
        (!path.empty() && *path.rbegin() != '/' ? (path + "/") : (path)) + prefix;
#endif

	auto nanos = std::chrono::duration_cast<std::chrono::nanoseconds>(
		std::chrono::high_resolution_clock::now().time_since_epoch()).count();

	std::string file = path_and_prefix + std::to_string(nanos) + postfix;
	while (std::experimental::filesystem::exists(file)) {
		nanos = std::chrono::duration_cast<std::chrono::nanoseconds>(
			std::chrono::high_resolution_clock::now().time_since_epoch()).count();

		file = path_and_prefix = std::to_string(nanos) + postfix;
	}

	return file;
}

std::string create_tmp_file(const std::string& path = "", const std::string& extension = "") {
	return create_unique_file(path, "tmp", 
		(!extension.empty() && *extension.begin() != '.' ? "." + extension : extension));
}

Przykład użycia:

#include <iostream>

// te funkcje tu wklej

int main()
{
	auto unique = create_unique_file("my_dir", "data", ".txt");
// ten plik jeszcze nie istnieje, więc nigdy nie nadpiszesz
	std::cout << "Unique file: " << unique << std::endl;
	// gdy potrzebuje kilka plików tymczasowych
	for (int i = 0; i < 10; i++) {
		std::cout << "Temporary file: " << create_tmp_file("my_tmp_files", "txt") << std::endl;
	}
}

Ważne: funkcja nazywa się create_unique_file, ale żadnego pliku nie tworzy, tworzy tylko jego nazwę i zwraca

komentarz 29 sierpnia 2018 przez MatZyN Początkujący (350 p.)
Korzystam z Codeblocks'a

4 odpowiedzi

0 głosów
odpowiedź 28 sierpnia 2018 przez Zaqu93 Gaduła (4,850 p.)
wybrane 28 sierpnia 2018 przez MatZyN
 
Najlepsza
Ja to bym zrobił tak że przed każdym zapisem do nowego pliku inkrementowałbym zmienną złóżmy x tak że na początku x jest równe 0 utworzyłbym tablicę na naprzykład 200 komórek i gdy x = 0 to do saves [x] wpisywałbym no plik0.txt po czym w nazwie pliku dawał bym po prostu saves [x] niewiem czy tak się da bo pisze w js ;P
komentarz 28 sierpnia 2018 przez MatZyN Początkujący (350 p.)
Coś pomyśle. Dzięki:-)
0 głosów
odpowiedź 28 sierpnia 2018 przez Patryk Krajewski Nałogowiec (26,170 p.)
Żeby utworzyć nowy plik potrzebujesz nową nazwę. Albo zrób sobie jakąś numeracje albo generuj stringa. Czy używając daty tak jak Rafals  napisał.
0 głosów
odpowiedź 29 sierpnia 2018 przez DragonCoder Nałogowiec (36,500 p.)
A co chcesz zapisac? Bo zalozmy, ze ma byc to lghin i haslo oraz pin uzytkownika, to mozesz pobrac login i uzyc jako nazwy pliku i tyle
komentarz 29 sierpnia 2018 przez MatZyN Początkujący (350 p.)
NIe chce zapisywac dane wpisywane z klawiatury. Żadne PINY
0 głosów
odpowiedź 1 września 2019 przez JakSky Stary wyjadacz (14,770 p.)
Najlepiej sprawdzić czy plik o danej nazwie już istnieje, jeżeli tak to przypisać jakąś inną nazwę, według schematu. Możesz użyć GUID aby nazwy były losowe. GUID ma 340 282 366 920 938 463 463 374 607 431 768 211 456 kombinacji, więc prawdopodobieństwo wylosowania dwóch takich samych wartości jest bardzo małe.

Podobne pytania

+2 głosów
0 odpowiedzi 139 wizyt
pytanie zadane 11 lutego 2022 w C i C++ przez RufinB Obywatel (1,830 p.)
0 głosów
3 odpowiedzi 311 wizyt
0 głosów
1 odpowiedź 128 wizyt
pytanie zadane 29 grudnia 2018 w JavaScript przez Whereismycode Obywatel (1,710 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 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!

...