[Windows/Word/C++] File locking mechanisme

Pagina: 1
Acties:

  • Douwe63
  • Registratie: September 2003
  • Laatst online: 03-06 20:56
Was even bezig uit te zoeken hoe het file locking mechanisme van Windows/Word eigenlijk werkt bij network shares.

Als iemand een Word document opent (test.doc) wordt er een hidden file (~$test.doc) gegenereerd met daarin o.a. de naam van degene die de file open heeft. Wanneer iemand anders via het netwerk dezelfde file opent wordt krijg je keurig de melding dat iemand bezig is (met de naam uit de hidden file).

Gooi ik echter de hidden file weg dan heeft Word nog steeds door dat de file geopend is (door 'another user'). Hoe gaat dit in zijn werk? Ik wil een soortgelijk mechanisme hebben voor een applicatie die we hier aan het maken zijn (dus dat er maar 1 persoon tegelijk een bestand kan wijzigen. Wanneer een tweede persoon via het netwerk hetzelfde bestand wil open moet het automatisch read-only geopend worden (de applicatie behandelt hem dan als read only).

Google geeft vrij weinig (bruikbare) info terug dus vandaar dat ik hem hier maar even op gooi.

Komt het gewoon neer op low level io system calls (_fsopen) of is er een simpeler/standaard voorziening aanwezig die ik zou kunnen gebruiken. De applicatie wordt gemaakt met Visual Studio .Net C++.

  • SWfreak
  • Registratie: Juni 2001
  • Niet online
Ik weet niet wat dat ~ bestand precies is, maar volgens mij kun je als je een file opent en dat niet lukt vanwege sharing wel via GetLastError opvragen of ie gelockt is door iemand anders (ik gok op n ERROR_ACCESS_DENIED). Als dat zo is, geeft Word dat door aan de gebruiker, en anders lockt ie m voor zichzelf. Hoe dat precies moet staat ergens bij CreateFile op MSDN...

[ Voor 9% gewijzigd door SWfreak op 27-10-2003 17:42 . Reden: ff wat meer erbij ]


  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 18:57

Reptile209

- gers -

En als het goed is kan je bij het openen van de file aangeven hoe de beveiligingsrechten moeten staan. Weet ze zo niet uit mijn hoofd, maar dat zijn opties als: "boeie", "iedereen lezen, ikke schrijven", "alles is voor Bassie" (exclusieve rechten dus).
Kijk daar eens naar bij je favoriete file-open-component, ik weet 'm alleen voor Delphi te vinden. :)

Zo scherp als een voetbal!


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 17:14
CreateFile ( ... FILE_SHARE_READ ... )
1 minuut in MSDN, en dat was omdat ik eerst naar OpenFile keek.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein