Datei shared öffnen

Anfängerfragen zum Programmieren mit PureBasic.
HJA
Beiträge: 18
Registriert: 21.11.2007 16:58
Wohnort: Wuppertal

Beitrag von HJA »

Hallo,

vielen dank für die Antworten.

Letzendlich ist meine Ursprungsfrage aber wohl zu verneinen.

Vielleicht noch zur Erklärung: ich stehe noch VOR der Entscheidung welchen Compiler ich nehme. Daher suche ich zunächst auch mal den, der meine Anforderungen möglichst gut abdeckt.

Das man bei jedem Compiler auch durch Drumherumarbeiten fehlendes ersetzen kann, bzw. nachbilden kann, ist mir nat. klar. So könnte ich den Dateizugriff z.B. über eine DLL realisieren, dann können soviele gleichzeitig schreibend zugreifen wie sie wollen.

Gruss
hja

[/quote][/code]
Andreas
ToolbarKönig
Beiträge: 142
Registriert: 08.09.2004 08:33

Beitrag von Andreas »

Geht schon, eine Datei shared zu öffnen. Dazu musst Du allerdings ein wenig WIN-API bemühen.
Über eine registrierte Message kannst Du dann auch die Position und Anzahl der Bytes in der Datei übermitteln,
an der eine Änderung eintrat, und dann darauf reagieren.
Versteht sich von selbst, dass das nur mit Deinen Programmen funktionieren kann !

Zum Testen hier mal 2 Programme die zur selben Zeit auf eine Textdatei zugreifen können.

Programm 1:

Code: Alles auswählen

Global message.l
Procedure WCB(wnd,msg,wparam,lparam)
    Result = #PB_ProcessPureBasicEvents
    Select Msg
    Case message
    Debug "geändert"
    Debug "Position : "+Str(wparam)
    Debug "Bytes    : "+Str(lparam)
    EndSelect
    ProcedureReturn Result
EndProcedure

hFile.l = CreateFile_("Test.txt", #GENERIC_READ|#GENERIC_WRITE, #FILE_SHARE_READ|#FILE_SHARE_WRITE, 0,#OPEN_ALWAYS,#FILE_FLAG_OVERLAPPED,0)
If OpenWindow(0, #PB_Ignore,#PB_Ignore,640,480, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
  If CreateGadgetList(WindowID(0))
    ButtonGadget(0, 10,10,80,24,"OK")
  EndIf
  SetWindowCallback(@WCB())
  Message = RegisterWindowMessage_("aha")
  Repeat
    EventID = WaitWindowEvent()
    Select EventID
    Case #PB_Event_Gadget
      Select EventGadget()
      Case 0
      ol.OVERLAPPED
      ol\Offset = 0
      WriteFile_(hFile,@"Shared1",7,@bw.l,ol)
      SendMessage_(#HWND_BROADCAST,Message,0,7)
      EndSelect
    Case #PB_Event_CloseWindow
      CloseHandle_(hFile)
      Quit = 1
    EndSelect
  Until Quit = 1
EndIf
End
Programm 2:

Code: Alles auswählen

Global message.l
Procedure WCB(wnd,msg,wparam,lparam)
    Result = #PB_ProcessPureBasicEvents
    Select Msg
    Case message
    Debug "geändert"
    Debug "Position : "+Str(wparam)
    Debug "Bytes    : "+Str(lparam)
    EndSelect
    ProcedureReturn Result
EndProcedure

hFile.l = CreateFile_("Test.txt", #GENERIC_READ|#GENERIC_WRITE, #FILE_SHARE_READ|#FILE_SHARE_WRITE, 0,#OPEN_ALWAYS,#FILE_FLAG_OVERLAPPED,0)
If OpenWindow(0, #PB_Ignore,#PB_Ignore,640,480, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
  If CreateGadgetList(WindowID(0))
    ButtonGadget(0, 10,10,80,24,"OK")
  EndIf
  SetWindowCallback(@WCB())
  Message = RegisterWindowMessage_("aha")
  Repeat
    EventID = WaitWindowEvent()
    Select EventID
    Case #PB_Event_Gadget
      Select EventGadget()
      Case 0
      ol.OVERLAPPED
      ol\Offset = 12
      WriteFile_(hFile,@"Shared2",7,@bw.l,ol)
      SendMessage_(#HWND_BROADCAST,Message,12,7)
      EndSelect
    Case #PB_Event_CloseWindow
      CloseHandle_(hFile)
      Quit = 1
    EndSelect
  Until Quit = 1
EndIf
End
Gruss Andreas
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag von Thorium »

Scarabol hat geschrieben: Ist aber relativ kompliziert -> Wer suchet der findet...
Was soll an Write Share kompliziert sein? Vieleicht gehts in dem Artikel noch um mehr. Man muss als Sharemode beim Öffnen lediglich FILE_SHARE_READ|FILE_SHARE_WRITE angeben. Wie im Source hier nachzulesen.

Ich sags immer wieder gerne, solcherart Informationen findet man in der MSDN
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
HJA
Beiträge: 18
Registriert: 21.11.2007 16:58
Wohnort: Wuppertal

Beitrag von HJA »

Hallo,

Andreas, vielen Dank für Deine Mühe. Aber es ging mir wirklich nur darum herauszufinden, ob Purebasic das von Hause aus kann. Ich möchte soweit eben möglich alles ohne fremde Aufrufe erstellen. Da ich bisher nie einen Compiler nutzte der das nicht von Hause aus unterstützte, war ich halt überrascht und stellte daher die Frage.

Ohne Fremdaufrufe bleiben die Programme halt am flexibelsten. Normal ist nur die Syntax eine etwas andere. Früher nutze ich z.B. ein Programm um den Source von CP/M nach PC anzupassen, oder von einer Compilerversion zur nächsten. Das klappt halt alles nur, wenn nur die Syntax geändert werden muss.

Nochmals danke
Gruss
hja
Antworten