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. :oops:
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 :banghead:

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 :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

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