Seite 1 von 1
Kopieren einer bereits geöffneten Datei
Verfasst: Do, 26. Jan 2017 9:11
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
Re: Kopieren einer bereits geöffneten Datei
Verfasst: Do, 26. Jan 2017 9:18
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
Re: Kopieren einer bereits geöffneten Datei
Verfasst: Do, 26. Jan 2017 9:20
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.
Re: Kopieren einer bereits geöffneten Datei
Verfasst: Do, 26. Jan 2017 9:36
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.
Schließt man dann Outlook wird der Inhalt sofort eingelesen (was ja logisch ist).
Re: Kopieren einer bereits geöffneten Datei
Verfasst: Do, 26. Jan 2017 10:47
von georg
Hallo, Hans-Peter -
wie viel von der Datei hast Du eingelesen? 1 Byte, 10 Bytes, 1 KB, oder die ganze Datei?
Re: Kopieren einer bereits geöffneten Datei
Verfasst: Do, 26. Jan 2017 12:52
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
Re: Kopieren einer bereits geöffneten Datei
Verfasst: Do, 26. Jan 2017 13:38
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.
Re: Kopieren einer bereits geöffneten Datei
Verfasst: Do, 26. Jan 2017 14:03
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
Habe jetzt ein bischen rumgespielt: es geht bis 532 Bytes, ab 533 Bytes wird nichts gelesen
Mit HoboCopy kann ich die geöffnete PST-Datei kopieren:
https://github.com/candera/hobocopy/downloads
Re: Kopieren einer bereits geöffneten Datei
Verfasst: Do, 26. Jan 2017 15:14
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.
Re: Kopieren einer bereits geöffneten Datei
Verfasst: Fr, 27. Jan 2017 11:10
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.
Re: Kopieren einer bereits geöffneten Datei
Verfasst: Fr, 03. Feb 2017 7:31
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