Kopieren einer bereits geöffneten Datei

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
KlausL
UDF-Programmierer
UDF-Programmierer
Beiträge: 54
Registriert: Fr, 23. Okt 2009 11:38

Kopieren einer bereits geöffneten Datei

Beitrag von KlausL »

Hallo,

ich habe das Problem, an einem Arbeitsplatz, an dem mit Microsoft Office gearbeitet wird, im laufenden Betrieb die PST-Datei zu sichern, ohne daß der Anwender sein OUTLOOK schliessen muß. Gibt es mit Xbase++ die Möglichkeit, eine Datei, die von einer anderen Applikation geöffnet wurde, zu kopieren?

Für Eure Tipps vielen Dank im Voraus!

Klaus
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

Re: Kopieren einer bereits geöffneten Datei

Beitrag von HaPe »

Hallo Klaus !
Gibt es mit Xbase++ die Möglichkeit, eine Datei, die von einer anderen Applikation geöffnet wurde, zu kopieren?
Direkt nur mit Xbase geht nicht; da muß man das Betriebssystem bemühen.
Über eine Schatten-Kopie geht das.
Hier mal die Grundlagen: https://de.wikipedia.org/wiki/Volume_Sh ... py_Service
Und ein Tool welches das für eine Datei durchführen kann: http://www.alant.com/windows-allg/56-ge ... kopie.html
Zuletzt geändert von HaPe am Do, 26. Jan 2017 9:22, insgesamt 1-mal geändert.
--
Hans-Peter
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Kopieren einer bereits geöffneten Datei

Beitrag von georg »

Hallo, Klaus -


sofern die PST-Datei nicht exclusive geöffnet ist, kannst Du die Datei mit fOpen(<cPST-Datei>, FO_DENYNONE) öffnen, auslesen und den Inhalt als Backup kopieren.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

Re: Kopieren einer bereits geöffneten Datei

Beitrag von HaPe »

Hallo Klaus !
sofern die PST-Datei nicht exclusive geöffnet ist, ...
Gerade (mit VFP9 und OL2016) probiert.
Öffnen kann man die PST-Datei mit FOPEN und bekommt ein Datei-Handle zurück; aber beim FREAD bleibt das Einlesen hängen. :oops:
Schließt man dann Outlook wird der Inhalt sofort eingelesen (was ja logisch ist).
--
Hans-Peter
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Kopieren einer bereits geöffneten Datei

Beitrag von georg »

Hallo, Hans-Peter -


wie viel von der Datei hast Du eingelesen? 1 Byte, 10 Bytes, 1 KB, oder die ganze Datei?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

Re: Kopieren einer bereits geöffneten Datei

Beitrag von HaPe »

Hallo Georg !
wie viel von der Datei hast Du eingelesen? 1 Byte, 10 Bytes, 1 KB, oder die ganze Datei?
Ich wollte 65000 Byte auf einen Rutsch in eine Zeichenvariable einlesen bei einer Größe von 271360 Bytes der PST-Datei.

Erst nach schließen der PST-Datei wurde das Einlesen in der VFP-IDE durchgeführt.
Ich gehe davon aus, dass Xbase dieselben Windows-API-Funktionen wie VFP verwendet.

So, jetzt auch in Xbase probiert:

Code: Alles auswählen

LOCAL lnHandle, lnRead
LOCAL lcBuffer

lnHandle = FOPEN( 'c:\Users\hape\Documents\Outlook-Dateien\Outlook.pst', FO_DENYNONE )
IF lnHandle > 0
    lcBuffer := REPLICATE( CHR( 0 ), 65001 )
    lnRead := FREAD( lnHandle, @lcBuffer, 65000 )
    ConfirmBox( , STR( lnRead, 10, 0 ) + ' Bytes gelesen' )
    FCLOSE( lnHandle )
ELSE
    ConfirmBox( , 'Datei konnte nicht geöffnet werden' )
ENDIF
Wenn OL geöffnet ist kommt "0 Bytes gelesen", andernfalls "65000 Bytes gelesen"

Das heißt auf schwäbisch: so geds ned :banghead:
--
Hans-Peter
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Kopieren einer bereits geöffneten Datei

Beitrag von georg »

Tja, was soll ich da schreiben, zumal ich mit einer Schwäbin verheiratet bin?

Code: Alles auswählen

#INCLUDE "AppEvent.ch"
#INCLUDE "FileIO.ch"
#INCLUDE "Xbp.ch"

FUNCTION Main
   Local cFile, cDaten
   Local nHandle, nRead
   
   cFile := "C:\Users\n6\AppData\Local\Microsoft\Outlook\georg.de.ost"
   nHandle := fOpen(cFile, FO_DENYNONE)
   IF nHandle < 1
      ConfirmBox(, "Kann " + cFile + " nicht öffnen", "Fehler", XBPMB_OK, XBPMB_CRITICAL)
      RETU(.F.)
   ENDIF
   cDaten := Space(128)
   nRead := fRead(nHandle, @cDaten, Len(cDaten))
   IF nRead < 1
      ConfirmBox(, "Kann nichts aus der Datei lesen", "Fehler", XBPMB_OK, XBPMB_INFORMATION)
   ENDIF
   fClose(nHandle)
RETURN(.T.) 
Ich habe es mal (bescheiden, wie wir Rheinländer nun einmal sind) nur mit 128 Byte versucht, und die kann ich lesen. Eingesetzt wird hier Office 2010.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

Re: Kopieren einer bereits geöffneten Datei

Beitrag von HaPe »

Hallo Georg !
Ich habe es mal (bescheiden, wie wir Rheinländer nun einmal sind) nur mit 128 Byte versucht, und die kann ich lesen. Eingesetzt wird hier Office 2010.
Hmm, verstehe ich jetzt nicht :x

Habe jetzt ein bischen rumgespielt: es geht bis 532 Bytes, ab 533 Bytes wird nichts gelesen :roll:


Mit HoboCopy kann ich die geöffnete PST-Datei kopieren:
https://github.com/candera/hobocopy/downloads
--
Hans-Peter
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Kopieren einer bereits geöffneten Datei

Beitrag von Koverhage »

Eigentlich kann doch das ganze mit runshell/copy oder fcopy gemacht werden, wobei sich mir
der wirkliche Sinn eine in Benutzung geöffnete Datei zu sichern nicht erschließt. Das mach für mich keinen Sinn.
Aber egal, wo ist das Problem dem Anwender einen Hinweis zu zeigen, dass die DS erstellt werden soll
und er kurz Outlook beenden muss? Die DS findet ja nicht permanent statt.
Gruß
Klaus
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Kopieren einer bereits geöffneten Datei

Beitrag von brandelh »

Ob ein Programm eine offene Datei zum lesen öffnen kann hängt davon ab, wie das ursprüngliche Programm die Datei geöffnet hat.
FOPEN() bei Xbase++ versucht die Datei zum lesen geshared zu öffnen, wenn das nicht geht, dann hat das andere Programm die Datei exclusive oder geschützt geöffnet.
Gruß
Hubert
KlausL
UDF-Programmierer
UDF-Programmierer
Beiträge: 54
Registriert: Fr, 23. Okt 2009 11:38

Re: Kopieren einer bereits geöffneten Datei

Beitrag von KlausL »

Hallo,

vielen Dank für eure Antworten.

Tatsächlich ist mir der Aufwand, die geöffnete PST-Datei an einem Arbeitsplatz automatisch sichern zu können, einfach zu groß. Muß daher jetzt vom Anwender selbst mit Outlook durchgeführt werden.


Grüße,

Klaus
Antworten