Wyszukiwarka MP3 | Web Edit | Twoje IP | Reklama za darmo
Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?


Strony: [1]

Autor Wątek: Zmienna jako część nazwy pliku  (Przeczytany 431 razy)

marian22435

  • Gość

Zmienna jako część nazwy pliku
« : Październik 13, 2009, 23:19:00 »
Witam. Pisze sobie program, jednak nie jestem wybitnym myślicielem w tej dziedzinie i chciałbym się dowiedzieć jak to zrobić, żeby do nazwy pliku wyjściowego dodać jakąś zmienna (dokładniej chodzi mi o to, żeby w jego nazwie była data, lub chociaż jakiś licznik). W jaki sposób to zmienić:


FILE *stream = fopen("c:\\file.txt", "a+t");

Chciałbym, żeby plik wyjściowy miał nazwę np. file1.txt, file2.txt, file3.txt.... lub file14-10-2009.txt, file15-10-2009.txt itd.
Z góry dziękuje za pomoc :)
Zapisane

Fuv

  • Global Moderator

  • Bywalec
  • *****
  • Offline Offline
  • Płeć: Mężczyzna
  • Wiadomości: 69
  • GG: 9083444
  • Języki: (X)HTML, CSS, PHP, SQL, JS, C/C++, Pascal
  • Programmer
    • Zobacz profil
    • WWW
Odp: Zmienna jako część nazwy pliku
« Odpowiedź #1 : Październik 14, 2009, 12:31:44 »
#include <iostream>
using namespace std;
#include <sstream>
#include <fstream>

int main()
{
    fstream plik;
    ostringstream x;
    int zmienna=1; //mozesz tak samo miec tutaj date czy cokolwiek chcesz
    x<<"hello"<<zmienna<<".txt";
    plik.open(x.str().c_str(), ios::out);
    //operacje na pliku
    plik.close();
   
    return EXIT_SUCCESS;
}

Słowo wyjaśnienia:

- fstream - biblioteka do otwarcia pliku
- ostringstream - klasa z biblioteki sstream. W niej będzie przechowywany nasz ciąg.
- x<<"hello"<<zmienna<<".txt"; - ta linijka przypomina normalną operację ze strumieniem cout. Po tej operacji w naszej klasie ostringstream będzie przechowywany ciąg: "hello1.txt". Akurat tak go nazwałem. Możesz dodawać tam rozmaite ciągi czy zmienne.
- plik.open(x.str().c_str(), ios::out);
To może się wydawać zagmatwane, ale po kolei. Mamy tu funkcję open z biblioteki fstream. Służy ona do otwarcia pliku(w ten sposób ja działam na plikach). Jej definicja wygląda tak:
void open(const char* nazwa_pliku,ios_base::openmode tryb_otwarcia_pliku);
Najpierw przyjmuje ciąg będący tzw. C-string'iem, a potem tryb otwarcia pliku. Dla nas wystarczy tryb zapisywania danych do pliku czyli ios::out. Tyle dygresji. No więc dla tej funkcji mamy przekazać nasz obiekt x(ostringstream). Funkcja składowa str() klasy ostringstream udostępnia bufor, który jest łańcuchem C++ - obiektem klasy string. My jednak potrzebujemy tak jak mówiłem "starej wersji" stringu jakim jest c-string(na przykład char[20]). Żeby zamienić taki string na c-string potrzebna jest funkcji c_str(). I to nam razem daje:
x.str().c_str()
Składamy to razem i mamy tę linijkę:
- dalej operacje na pliku i zamknięcie pliku
Zapisane
Wróg mojego wroga to mój przyjaciel.
Im więcej wrogów tym większy zaszczyt.

marian22435

  • Gość

Odp: Zmienna jako część nazwy pliku
« Odpowiedź #2 : Październik 14, 2009, 22:54:43 »
Wkleiłem powyższe źródło dodając je do mojego programu, jednak podczas kompilacji nowego programu wyskakują mi błędy:
"E2141 Declaration syntax error" (zaznacza klamrę otwierającą po linijce: int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int Count))
"W8004 'pEvt'is assigned a value that is never used" (zaznacza klamrę zamykającą, ale nie powyższego źródła, tylko gdzieś w środku programu)

Ktoś wie w czym może tkwić problem?
Zapisane
Strony: [1]
 

Powered by SMF 2.0 RC1.2 | SMF © 2006–2008, Simple Machines LLC - © Copyright 2007 - 2009 by Centrum Informatyczne Królnet
Kopiowanie artykułów bez zgody zabronione - programowanie delphi ansi c c++ pascal object webmastering html php

RSS | WAP2