dodawanie do nazwy pliku daty systemowej

0

Witam! Napisalem sobiet aki programik, który pobiera date systemową i chciałbym żeby mi ją dopisywał do nazwy pliku przy zapisywaniu:

#include<stdio.h>
#include<conio.h>
#include<iostream>
#include<Math.h>
#include<string>
#include<fstream>
#include <dos.h>
#include <windows.h>
#include <time.h>

using namespace std;
 
int main(void)
{ 
 
   time_t rawtime;
  struct tm * timeinfo;
  char buffer [80];

  time ( &rawtime );
  timeinfo = localtime ( &rawtime );
cout<<"Dzisiaj jest: ";
  strftime (buffer,80,"%c",timeinfo);

  cout<<buffer;
  
fstream plik_dane("C:\\alarm\\raport.txt",ios::out);
plik_dane<<"costam";

    getch();
    return 0;
}

czyli żeby plik na koniec wyglądał mniej więcej tak raport 05/20/11 1839. Z góry dzięki za pomoc

0
string nazwaPliku = "raport", tmp;
time_t rawtime;
  struct tm * timeinfo;
 
  time ( &rawtime );
  timeinfo = localtime ( &rawtime );
cout<<"Dzisiaj jest: ";
  strftime (tmp.c_str(),80,"%c",timeinfo);

nazwaPliku.append(tmp);
nazwaPliku.append(".txt");
fstream plik_dane(nazwaPliku.c_str(),ios::out);
plik_dane<<"costam";

Nie kompilowałem, ale coś w ten deseń

Albo tak jak dragon poniżej :D

0
fstream plik_dane((string()+"C:\\alarm\\raport"+bufor+".txt").c_str(),ios::out);
0
Blood napisał(a)
string nazwaPliku = "raport", tmp;
time_t rawtime;
  struct tm * timeinfo;
 
  time ( &rawtime );
  timeinfo = localtime ( &rawtime );
cout<<"Dzisiaj jest: ";
  strftime (tmp.c_str(),80,"%c",timeinfo);

nazwaPliku.append(tmp);
nazwaPliku.append(".txt");
fstream plik_dane(nazwaPliku.c_str(),ios::out);
plik_dane<<"costam";

Nie kompilowałem, ale coś w ten deseń

Albo tak jak dragon poniżej :D

strftime (tmp.c_str(),80,"%c",timeinfo);

w tej linijce wywala błąd ze invalid conversion from const char to char

a w tej:
fstream plik_dane((string()+"C:\alarm\raport"+buffer+".txt").c_str(),ios::out);
wykonuje program ale nazwy nie zmienia.

0

No to możesz zrobić troszkę inaczej:

    string nazwaPliku = "raport ";
   time_t rawtime;
  struct tm * timeinfo;
  char buffer [80];

  time ( &rawtime );
  timeinfo = localtime ( &rawtime );
cout<<"Dzisiaj jest: ";
  strftime (buffer,80,"%c",timeinfo);

  cout<<buffer;

  nazwaPliku.append(buffer);
  nazwaPliku.append(".txt");

cout << nazwaPliku;

  fstream filestr (nazwaPliku, fstream::in | fstream::out); // ew. nazwaPliku.c_str()

  // >> i/o operations here <<

  filestr.close();

    getch();
    return 0;
}

To już chyba powinno działać

0

Moja wersja - ograniczyłem się do zbudowania nazwy pliku, bez zapisu do niego, bo widzę, że to już jest:

#include "stdafx.h"
#include <time.h>
#include <string>
#include <iostream>
#include <sstream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	time_t rawtime;
	time(&rawtime);

	tm* t = localtime(&rawtime);
	
	stringstream s;
	s<<"raport_"<<t->tm_year+1900<<"-"<<t->tm_mon+1<<"-"<<t->tm_mday+1
		<<" "<<t->tm_hour<<":"<<t->tm_min<<":"<<t->tm_sec<<".txt";
	cout<<s.str().c_str();

	return 0;
}
0

Nie wiem co jest, program blooda odpala ale nie zapisuje tej nazwy, a program tomka w ogóle nie chce wstać. Moze by dalo rade zapisac bez slowa raport tylko jako sama date systemowa plik? Bo tu ciężko coś idzie. Sam też nie ogarniam połowy tych funkcji;p

0

Jak to nie zapisuje nazwy? Przecież tam przy cout << nazwaPliku powinno Ci wyświetlić jak to wygląda.

0

Najprościej i najzrozumialej będzie tak:

time_t czas = time(NULL);
cout << "raport " << ctime(&czas);
0

Właśnie, wyświetlanie w programie to umiem zrobić, ale chodzi o to żeby zapisało na dysku twardym plik pod nazwą daty systemowej albo raport data systemowa.

Blood napisał(a)

Jak to nie zapisuje nazwy? Przecież tam przy cout << nazwaPliku powinno Ci wyświetlić jak to wygląda.

no wyswietla w programie ale pliku na dysku nie rusza w ogole jego nazwy

0

A no faktycznie. :D Można by po prostu dopisać ctime(&czas), ale mój sposób się nie zda, bo ma :, co jest niedopuszczalne w nazwach plików ;/ Chyba, że w stringu wyszukać : i zamienić na .? I dopiero dać do nazwy?

0

No na pewno musisz uważać na niedopuszczalne znaki, a wlaśnie się skubnałem, że takie są u mnie.
Mój program działa na 100% w podanej postaci. Sam go uruchamialem pod VS2010.

0

int _tmain(int argc, _TCHAR* argv[])

w tej linijce wywala mi błąd, że tchar is not declared, co moze byc nie tak?

0

Brak jakiegoś includa prawdopodobnie.
Proponuję to zamienić na domyślną wartość jaką generuje twoje IDE przy tworzeniu projektu typu "Console Application" w przypadku Visual Studio lub podobnego w innym IDE.

0

Panowie jeszcze jeden problem jest, chodzi o to, że w exe zapisuje plik z data ale bierze date po ostatniej kompilacji, czyli np jak prgram skompiluje 23 maja i wlanczam dzien pozniej exe to i tak bierze date 23 maj, jest jakas mozliwosc czyszczenia mu pamieci czy cos? bo program dziala tylko w exe nie bardzo a mi wlasnie na exe zalezy.

0

Staram się zrozumieć co napisałeś, ale za chusteczkę nie wiem o co Ci teraz chodzi :)
Mógłbyś rzucić kodem lub dokladniej opisać na czym teraz polega błąd?

1 użytkowników online, w tym zalogowanych: 0, gości: 1