Jednoczesna obługa pliku tekstowego kilku programów.
Ostatnio zmodyfikowano 2009-09-11 22:12
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: #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(); }
|
|
DejaVu |
» 2009-09-09 22:21:09 Użyj winsock'a jeśli piszesz chat'a (lub cokolwiek innego sieciowego). |
|
malan |
» 2009-09-09 22:44:09 file.clear(); file.close(); ... zamień na file.close(); file.clear(); |
|
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ść? |
|
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. |
|
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. |
|
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.
|
|
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; |
|
« 1 » 2 |