Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Jednoczesna obługa pliku tekstowego kilku programów.

Ostatnio zmodyfikowano 2009-09-11 22:12
Autor Wiadomość
steckel
Temat założony przez niniejszego użytkownika
Jednoczesna obługa pliku tekstowego kilku programów.
» 2009-09-09 22:01:53
Mam uruchomione 2 takie same programy, które operują na 1 pliku tekstowym. Mój problem polega na tym, że gdy w pierwszym programie dam polecenie dodania danych, a potem w drugim wczytanie danych to w tym 2 wczytuje tylko te stare dane(przed edycją programu 1). Mam nadzieję, że zostałem zrozumiany :)
Kod:
C/C++
#include <iostream>
#include <fstream>
#include <conio.h>
#include <string>

using namespace std;

string text;
string pathOfFile;
string nick;
string message;

void GetWords() {
    cout << "Wprowadz nick: ";
    cin >> nick;
    cout << "Wprowadz temat: ";
    cin >> pathOfFile;
}

void LoadFile() {
    fstream file;
    file.open( pathOfFile.c_str(), ios::in );
    if( !file.good() ) return;
   
    text = "";
    while( !file.eof() ) {
        string line;
        getline( file, line );
        text += line + '\n';
    }
    system( "cls" );
    cout << text << endl;
    file.clear();
    file.close();
}

void SaveFile() {
    fstream file;
    file.open( pathOfFile.c_str(), ios::out );
    for( int index = 0; index < text.size(); index++ ) {
        file << text[ index ];
    }
    file << message;
    file.clear();
    file.close();
}

void Writing() {
    while( true ) {
        string say;
        cout << "[" + nick + "]";
        cin >> say;
        if( say == "#exit" ) {
            SaveFile();
            return;
        }
        message = "[" + nick + "]" + say + "\n";
        SaveFile();
        LoadFile();
    }
}

int main() {
    GetWords();
    LoadFile();
    Writing();
}
P-10135
DejaVu
» 2009-09-09 22:21:09
Użyj winsock'a jeśli piszesz chat'a (lub cokolwiek innego sieciowego).
P-10137
malan
» 2009-09-09 22:44:09
C/C++
file.clear();
file.close();
... zamień na
C/C++
file.close();
file.clear();
P-10138
steckel
Temat założony przez niniejszego użytkownika
» 2009-09-10 17:21:53
@malan - miałem tak przedtem i nic to nie zmienia.
@Piotr Szawdyński - nie mam zamiaru tego robić przez sieć jak na razie. Chcę, aby po prostu 2 programy operowały jednocześnie na 1 pliku. Jest taka możliwość?
P-10149
pompom
» 2009-09-10 18:54:27
Spróbuj flushować bufor:
http://www.cplusplus.com/reference/iostream/manipulators /unitbuf/
Ale nie jestem pewien czy da się zmusić system do zapisu od razu nie używając winapi.

Btw - do komunikacji między procesami używa się albo (wirtualnych) plików mapowanych do pamięci (memory-mapped file), albo wiadomości okna, albo rur (pipe), albo "serwera poczty" (funkcja CreateMailslot - to do komunikacji między kilkoma procesami na raz).
Istniejące na dysku pliki tekstowe to nie jest za dobre rozwiązanie.
P-10150
steckel
Temat założony przez niniejszego użytkownika
» 2009-09-10 20:36:07
@pompon To też nie zadziałało. Poza tym nie mam zamiaru tworzyć profesjonalnego chata, bo to jest tylko praca domowa z informatyki. Kolega napisał w pascalu i mu działa.
P-10154
malan
» 2009-09-10 20:41:47
Hmmm... a to nie działa tak, że jeśli chcesz korzystać z jakiegoś pliku w 2 programach to plik musisz zamknąć i otworzyć ponownie ? Tzn. np.:
-uruchamiasz program x1;
-otwierasz plik xyz.txt programem x1;
-kończysz pracę programu x1 ( zamykasz plik xyz.txt);
-uruchamiasz program x2;
-otwierasz plik xyz.txt programem x2;
-kończysz pracę programu x2 ( zamykasz plik xyz.txt);
... itd.
P-10155
steckel
Temat założony przez niniejszego użytkownika
» 2009-09-10 20:53:30
Inaczej:
-programy x1 i x2 pracują jednocześnie
-otwieram plik xyz.txt programem x1;
-operuje na pliku xyz.txt programem x1;
-zamykam plik xyz.txt programem x1;
-otwieram plik xyz.txt programem x2;
-operuje na pliku xyz.txt programem x2;
-zamykam plik xyz.txt programem x2;
P-10157
« 1 » 2
  Strona 1 z 2 Następna strona