Diskuze: Zabezpečení cloudového souboru proti zápisu z jiné instance

C# .NET .NET (C# a Visual Basic) Zabezpečení cloudového souboru proti zápisu z jiné instance American English version English version

Avatar
Petr Čech (czubehead):

Ahoj. Mám adresář souborů, které se synchronizují přes cloudovou službu podobnou např. Dropboxu. Nemá žádné API.
Co bych potřeboval je, zjistit, zda je soubor otevřený ještě na jiném počítači připojeném k Internetu. Když si budu hrát s FileStreamem, docílím stejného efektu na stejném počítači. Ale já potřebuji, aby něco podobného fungovalo i pro 2 počítače na různých místech.
Napadlo mě, že bych mohl při otevření vytvořit ve stejném adresáři soubor, který by se smazal po zavření. Pokud by soubor existoval, znamenalo by to, že je soubor používán. To má ale problém. Pokud jakoukoliv instanci mojí aplikace uživatel ukončí jinak než standardní cestou, např. killnutím ze správce úloh, soubor se nesmaže a nesmaže se nikdy=> všechny další instance aplikace si budou myslet, že je používán.
Nemáte někdo nápad?

Odpovědět 13. září 19:30
Why so serious? -Joker
Avatar
Petr Čech (czubehead):

Toto vlákno je stále aktivní

Nahoru Odpovědět 15. září 14:05
Why so serious? -Joker
Avatar
Jan Vargovský
Redaktor
Avatar
Jan Vargovský:

Semafor, mutex, fronta zpráv, sdílená paměť ... Záleží, jestli je ten cloudy jen jako file server a nebo s tím souborem komunikuješ skrz něco.

EDIT: V případě toho druhého by ti neměl OS dát 2 handly pro jeden file, ale netuším, jestli to takhle platí, i když je to vzdáleně a ten proces neběží v tom OS

Editováno 15. září 16:07
 
Nahoru Odpovědět 15. září 16:06
Avatar
Odpovídá na Petr Čech (czubehead)
Luboš Běhounek (Satik):

Ten tvůj nápad bych rozšířil o kontrolu data toho souboru - ten druhý soubor, který indikuje by jsi měnil třeba každých 30s, takže pokud by uživatel aplikaci zavřel násilně, datum souboru by se přestalo updatovat.

Ty by jsi tedy jen kontroloval, jestli ten druhej soubor (indikující, že je ten soubor otevřený) buďto neexistuje nebo je starší než třeba minutu.

Nahoru Odpovědět  +1 15. září 16:36
:)
Avatar
Odpovídá na Jan Vargovský
Petr Čech (czubehead):

Ty různé počítače spolu nemají šanci komunikovat, jediné, co sdílejí je adresář s tím souborem, který updatuje cloudová aplikace, která funguje jako všechno ostatní- Dropbox, Google Drive, OneDrive...

Nahoru Odpovědět 15. září 17:16
Why so serious? -Joker
Avatar
jackx
Člen
Avatar
Odpovídá na Petr Čech (czubehead)
jackx:

Mno, ja bych ten "hlidaci" soubor povysil na XML, kde bys ukladal nazev otevreneho souboru, datum a cas otevreni a datum zavreni souboru. Pri otevreni souboru by se aktualizovala hodnota casu a data otevreni a hodnota zavreni by byla null. Jestlize by user tvuj softik vypl nasilim, jak tento stav rozeznas od toho, kdy ten soubor bude mit otevreny hodiny, nebo dny v kuse? Pak pri pokusu k otevreni souboru, jez ma datum otevreni a zaroven zavreni ==null, vytvoris jeho kopii... Takto to ma treba OneDrive. Tak nebo tak by na tento stav mel nejdrive tvuj soft upozornit a ty bys mel kontaktovat usera na druhe strane, pripadne schvalit vytvoreni kopie... A bylo by to pouzitelne i na vice souboru v jednom adresari :-)
Pak do toho XML jeste muzes zakomponovat nejaky atribut "ziju" vcetne data a casu zapisu "ziju". Toto datove razitko aktualizovat kazdou minuti. Jestlize pak aktualni cas je vetsi o 1 a vice minut, nez cas v razitku "ziju", softik nekdo vypnul :)

Nahoru Odpovědět 15. září 23:00
Nic není nemožné.
Avatar
Petr Čech (czubehead):

Takže jsem si od každého vzal něco a vymyslel toto: [obrázek]
Myslíte, že je to funkční řešení?

Akceptované řešení
+5 Zkušeností
Řešení problému
Nahoru Odpovědět  +2 16. září 14:31
Why so serious? -Joker
Avatar
Petr Čech (czubehead):

Takže už to mám zprovozněné. Funguje to tak, jak je naznačeno výše, jen LOCK soubor přímo v adresáři se ukázal býti nevhodným, tak jsem si na freehostingu udělal primitivní API. Víceméně zprostředkovává zápis k tomu souboru. Takže každých 30 s se pošle request na ten server s tím, že je to pořád aktivní. Samozřejmě je tam víc souborů, takže každému server na začátku přiřadí jedinečné Id, které se uchovává v souboru v adresáři vedle kýženého souboru.

Nahoru Odpovědět 17. září 22:26
Why so serious? -Joker
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.