[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

pl.comp.programming

[C#] Kilka procesów i pisanie do pliku

Kornel

4/4/2007 4:42:00 PM

Hej,
Zastanawiam sie czy jest w ogóle mo?liwe aby dwa (albo wiecej) procesów
pisa3y do jednego pliku jednocze?nie? (Pod Windows XP i nowsze).
Generalnie chodzi o jedn? aplikacje która bedzie odpalona w kilku instancjach
na i chcia3bym aby logowa3a do jednego pliku. Moje pomys3y:
1. Serwer, co? jak syslog do którego bym wysy3a3, on by zapisywa3
2. Otwieram plik, zapisuje co trzeba, zamykam, otwieram, pisze, zamykam ....
3. Próbowa3em z
FileStream fs = new FileStream(path, FileMode.Append, FileAccess.Write,
FileShare.ReadWrite); i zapisuje mi wtedy tylko jeden z nich.
4. ...?

P.S. Je?eli z3a grupa to sory, nie bardzo widze tutaj pl.comp.lang.csharp

--
Pozdrawiam,
Kornel



--
Wys3ano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta....
5 Answers

Adam Klobukowski

4/4/2007 5:15:00 PM

0

Kornel napisa3(a):
> Hej,
> Zastanawiam sie czy jest w ogóle mo?liwe aby dwa (albo wiecej) procesów
> pisa3y do jednego pliku jednocze?nie? (Pod Windows XP i nowsze).
> Generalnie chodzi o jedn? aplikacje która bedzie odpalona w kilku instancjach
> na i chcia3bym aby logowa3a do jednego pliku. Moje pomys3y:
> 1. Serwer, co? jak syslog do którego bym wysy3a3, on by zapisywa3
> 2. Otwieram plik, zapisuje co trzeba, zamykam, otwieram, pisze, zamykam ....
> 3. Próbowa3em z
> FileStream fs = new FileStream(path, FileMode.Append, FileAccess.Write,
> FileShare.ReadWrite); i zapisuje mi wtedy tylko jeden z nich.
> 4. ...?

Ad 1. Napewno zadzia3a, ale najbardziej skomplikowane
Ad 2. Da sie zrobic z tym ze moza sie zdazyc ze 2 procesy beda chcia3y
zrobic zapis "rownoczenie". Wówczas jednemu sie uda a drugiemu nie. Ten
ktoremu to sie uda, musi wtedy ponowic próbe. Mozna tu dodac jeszcze
jakis bufor jeszcze i zapis do pliku tylko co jakis czas od ostatniego
udanego zapisu, ale to juz jest kwestia czy w twoim konkretnym problemie
ma to sens.

--
Semper Fidelis

Adam Klobukowski
adamklobukowski@gmail.com

VotA

4/4/2007 7:44:00 PM

0

> Hej,
> Zastanawiam siê czy jest w ogóle mo¿liwe aby dwa (albo wiêcej) procesów
> pisa³y do jednego pliku jednocze¶nie? (Pod Windows XP i nowsze).
> Generalnie chodzi o jedn± aplikacjê która bêdzie odpalona w kilku
> instancjach
> na i chcia³bym aby logowa³a do jednego pliku. Moje pomys³y:
> 1. Serwer, co¶ jak syslog do którego bym wysy³a³, on by zapisywa³
> 2. Otwieram plik, zapisujê co trzeba, zamykam, otwieram, piszê, zamykam
> ....
> 3. Próbowa³em z
> FileStream fs = new FileStream(path, FileMode.Append, FileAccess.Write,
> FileShare.ReadWrite); i zapisuje mi wtedy tylko jeden z nich.
> 4. ...?

Ja bym poczytal cos o semaforach... Co prawda znam to tylko z teorii ale
powinno rozwiazac Twoj problem. ZTCW w javie jest to ciekawie rozwiazane,
wiec mysle ze w C# tez powinno...

Pozdrawiam
Bartosz Jarkowski


VotA

4/4/2007 7:55:00 PM

0

O, nawet linka podam :)

http://pl.wikipedia.org/wiki/Semafor_%28info...

Pozdrawiam
Bartosz Jarkowski


edx

4/5/2007 4:48:00 AM

0

Kornel napisa3(a):
> Hej,
> Zastanawiam sie czy jest w ogóle mo?liwe aby dwa (albo wiecej) procesów
> pisa3y do jednego pliku jednocze?nie? (Pod Windows XP i nowsze).
> Generalnie chodzi o jedn? aplikacje która bedzie odpalona w kilku instancjach
> na i chcia3bym aby logowa3a do jednego pliku. Moje pomys3y:
> 1. Serwer, co? jak syslog do którego bym wysy3a3, on by zapisywa3
> 2. Otwieram plik, zapisuje co trzeba, zamykam, otwieram, pisze, zamykam ....
> 3. Próbowa3em z
> FileStream fs = new FileStream(path, FileMode.Append, FileAccess.Write,
> FileShare.ReadWrite); i zapisuje mi wtedy tylko jeden z nich.
> 4. ...?
>
> P.S. Je?eli z3a grupa to sory, nie bardzo widze tutaj pl.comp.lang.csharp
>
Zrób serwera nas3uchujacego na okre?lonym socket-cie np na
localhost:port. Przyjdzie po3?czenie, to odpal w?tek (reader) na tym
po3?czeniu. Reader odebrany komunikat przesy3a mechanizmem mutex-owym do
innego w?tku odpalonego wcze?niej (writer), który czeka na tym mutex-ie
na komunikaty. Jak jaki? odbierzemy to zapisujemy go do pliku i znowu
czekamy.
Robi3em to w C korzystajac z biblioteki pthread, w C# te? sie powinno.

Zamiast socketów i mutex-ów pomy?l o gotowym mechanizmie IPC typu
kolejka komunikatów. XP s? chyba POSIX-o podpbne? :-)

Edward

Kralu

4/5/2007 4:40:00 PM

0

Kornel wrote:
> Hej,
> Zastanawiam sie czy jest w ogóle mo?liwe aby dwa (albo wiecej) procesów
> pisa3y do jednego pliku jednocze?nie? (Pod Windows XP i nowsze).

FileStream.(Un)Lock tego nie zalatwi?
http://msdn2.microsoft.com/en-us/library/system.io.filestream...

Pozdrawiam
--
Marcin Kral