Das nächste Entwicklertreffen findet Anfang Mai in Münster statt - weitere Infos bzw. zur Anmeldung!

FILECOPY(=

Still in use?

Moderator: Moderatoren

Antworten
Benutzeravatar
sherlogg
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 48
Registriert: Mo, 19. Nov 2012 14:59
Wohnort: Mühlheim am Main
Kontaktdaten:

FILECOPY(=

Beitrag von sherlogg » Do, 07. Aug 2014 14:33

Hallo Zusammen!

Ich muss in einem älteren Programm Anpassungen machen, die es erforderlich machen, eine ganze Reihe von .DBF's und .DBT's wegzukopieren. Jetzt habe ich ein sehr witziges Problem mit dem FILECOPY() der Tools (beim Befehl COPY FILE ist es erstaunlicherweise das gleiche Verhalten).

Ich sammle die DBF's und DBT's in einem Array und arbeite das in einer Schleife ab ...

Code: Alles auswählen

FOR nI := 01 TO LEN(Array)
       FILECOPY(cAlterPfad+Array[nI],cNeuerPfad+Array[nI])    // Backup-Modus spielt keine Rolle
NEXT
Das Array ist mit 77 Einträgen sehr überschaubar. Jetzt habe ich das Phänomen, dass er mittendrin 5 oder 6 Dateien (eine ist an Position 56 und die letzten sind fast am Ende oder am Ende des Array's) nicht kopiert. Im Zielverzeichnis gibt es diese Dateien noch nicht (das kann also nicht das Problem sein). Alle anderen werden problemlos kopiert.

Und jetzt kommts:

Wenn ich in einem kleinen Testprogramm FILECOPY() mit "Direkteinträgen" nutze

Code: Alles auswählen

FILECOPY("C:\FAKT\DATEI.DBF"  ,  "D:\PROJEKTE\CLIPPER\BACKUP\20140807\DATEI.DBF")
funktioniert es.

Wie schon gesagt, als Variablen funktioniert der FILECOPY() bei den wenigen Dateien nicht.

Ich achte darauf

- das keine Leerzeichen in den Variablen enthalten sind
- das die Einstellungen CSETSAFETY() und SETFCREATE() richtig gesetzt sind
- zur Sicherheit benutze ich nach jeden Kopiervorgang FILECCLOSE()
- das die Verzeichnistiefe nicht überschritten wird
- die Dateinamen nicht zu lang sind

Es sind immer die gleichen DBF's, die er NICHT kopiert, aber wie gesagt, wenn ich alles in Anführungszeichen im Testprogramm nutze, dann tut es. Ich habe schon die Struktur einer dieser DBF in eine andere Datei kopiert, einen APPEND von der anderen DBF gemacht. Das Original gelöscht und den Clone umbenannt. Gleiches Phänomen.

Ich habe eigentlich keine Lust mit der APPEND FROM oder COPY TO Freckelei anzufangen, da der FILECOPY() ja eigentlich superschnell arbeitet.

Hat einer von Euch schon einmal das gleiche Phänomen gehabt? Ist das jetzt ein UFO-Phänomen?

Mein Problem ist halt, dass ich mich jetzt fest gebissen habe :razz: und eigentlich nicht aufgeben will!

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: FILECOPY(=

Beitrag von Tom » Do, 07. Aug 2014 14:50

Ich würde mal etwas Debugcode einfügen und die Parameter jedes Kopiervorgangs anzeigen lassen, ggf. ergänzt um eine File()-Abfrage auf die Zieldatei und deren Ergebnis. Ich bin sicher, dass es irgendwo ein Dateinamenproblem geben muss, wenn der Fehler immer an der gleichen Stelle auftritt. Denkbar wären aber auch Rechte oder hineinfunkende Virenscanner, was ich aber für unwahrscheinlich halte. Ergänzend könnte man ProcMon() (www.sysinternals.com) mitlaufen lassen, um zu sehen, welche Operation auf Betriebssystemebene ausgelöst wird und welche Probleme es ggf. dabei gibt.
Herzlich,
Tom

Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2437
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Kontaktdaten:

Re: FILECOPY(=

Beitrag von Wolfgang Ciriack » Do, 07. Aug 2014 15:44

Notfalls auch mal eine kleine Schleife einbauen und sehen ob es was bringt (ungetestet):

Code: Alles auswählen

c:=0
do while (n:=filecopy(datei1, datei2))<>filesize(datei2) .and. c<10
    sleep(10)
    c++
enddo
if c>0 
   ** Meldung ausgeben, mehr als 1x probiert
endif
Viele Grüße
Wolfgang

Benutzeravatar
komnick
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 38
Registriert: Mi, 04. Jun 2014 9:56
Wohnort: Berlin

Re: FILECOPY(=

Beitrag von komnick » Do, 07. Aug 2014 15:46

Entschuldige die triviale Frage, aber...
kann es sein, dass im Zielverzeichnis einfach nicht genug Platz ist?
Gruß, Martin

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14632
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: FILECOPY(=

Beitrag von brandelh » Do, 07. Aug 2014 15:58

NATÜRLICH :!:

aber das sollte heute auf Festplatten nicht mehr vorkommen ;-)
Versuche doch mal die Dateien mit XCOPY /V zu kopieren, dort sollte es eine Fehlermeldung geben, wenn das Betriebssystem nicht kann.
Eventuell sind die Dateien auch nicht von jedem Programm geschlossen, es ist nicht selbstverständlich, dass man offene Dateien kopieren kann ;-)
Gruß
Hubert

Benutzeravatar
sherlogg
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 48
Registriert: Mo, 19. Nov 2012 14:59
Wohnort: Mühlheim am Main
Kontaktdaten:

Re: FILECOPY()

Beitrag von sherlogg » Do, 07. Aug 2014 16:18

Hallo Zusammen,

zunächst mal Danke für die Antworten.

Die triviale Frage nach dem Platz sei gestattet. An solche Dinge denkt man meist zuletzt. Aber daran habe ich schon gedacht und wie ja gesagt wurde, in der heutigen Zeit ...

Debug Infos sind drin. Keine Erkenntnisse. Eine Schleife habe ich noch nicht eingebaut. Werde ich gleich mal tun. XCOPY /V werde ich auch gleich testen.

Interessant ist:

Ich habe eine der Problem-Dateien (heißt: LPROGAUF.DBF -> lokale Programmaufrufe) mal gelöscht und habe eine DBF mit dem Namen NPROGAUF.DBF (identische Struktur, nur anderes VZ) auf LPROGAUF.DBF kopiert. NPROGAUF.DBF wird von FILECOPY() sauber kopiert. Nach dem Umkopieren wird LPROGAUF.DBF von FILECOPY() trotzdem nicht kopiert. Das ist wirklich schräg.

P.S. das alles läuft noch auf dem Entwicklungsrechner/Testumgebung. Also ausreichend HDD und MEM ;-)

Benutzeravatar
sherlogg
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 48
Registriert: Mo, 19. Nov 2012 14:59
Wohnort: Mühlheim am Main
Kontaktdaten:

Re: FILECOPY(=

Beitrag von sherlogg » Do, 07. Aug 2014 17:01

Hallo Zusammen!

Das hat alles nichts gebracht. XCOPY /V kopiert einwandfrei. Die Schleife hat nur die Erkenntnis gebracht, dass er auf die Abfrage c > 0 läuft - also erfolglos versucht zu kopieren.

Da ich mit verschiedenen Pfadangaben arbeite, habe ich das "faule Ei" mal in das Programmverzeichnis kopiert. Von dort aus wird sie einwandfrei kopiert.

Ich denke, es ist an der Zeit kein Zeit mehr zu verschwenden und einen anderen Weg zu suchen.

Nochmals Danke an Euch!

Gruß, Dieter

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14632
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: FILECOPY(=

Beitrag von brandelh » Do, 07. Aug 2014 17:42

ich habe immer XCOPY über eine batch genutzt, das hat den Vorteil, dass das Betriebssystem dafür verantwortlich ist ;-)
Gruß
Hubert

Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 14598
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Kontaktdaten:

Re: FILECOPY(=

Beitrag von Martin Altmann » Do, 07. Aug 2014 18:20

Moin,
wie heißen denn die Quell und Zielpfad bei den nicht kopierten Dateien?
Sind die Pfade identisch zu den Dateien, die erfolgreich kopiert wurden?

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
stellv. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
sherlogg
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 48
Registriert: Mo, 19. Nov 2012 14:59
Wohnort: Mühlheim am Main
Kontaktdaten:

Re: FILECOPY()

Beitrag von sherlogg » Do, 07. Aug 2014 19:18

Hallo Martin,

der Zielpfad ist durchgehend der Gleiche ...

Bsp.: D:\PROJEKTE\CLIPPER\FAKTAKT\BACKUP\20140807

Die Quellen können unterschiedlich sein (maximal 2 verschiedene Pfade).

Gruß, Dieter

Benutzeravatar
sherlogg
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 48
Registriert: Mo, 19. Nov 2012 14:59
Wohnort: Mühlheim am Main
Kontaktdaten:

Re: FILECOPY(=

Beitrag von sherlogg » Do, 07. Aug 2014 19:19

Und ja, die Zielpfade sind identisch ... erfolgreich kopiert und nicht erfolgreich kopiert

Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1561
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: FILECOPY(=

Beitrag von Werner_Bayern » Do, 07. Aug 2014 22:46

mal testen mit

Code: Alles auswählen

copy file (cQuelle) to (cZiel)
Damit sollte es gehen. Hatte mal ein ähnliches Problem unter XP mit fwrite (Nachstellung des xcopy-Befehls in Xbase++). Mit o. g. Befehl ging es, leider dann ohne jeglichen Komfort: Kein Rückgabeparameter, keine Möglichkeit eines Fortschrittsbalken etc.

Gibts den unter clipper?
es grüßt euch

Werner

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11554
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: FILECOPY(=

Beitrag von AUGE_OHR » Fr, 08. Aug 2014 2:02

hi,

da Werner gerade "Fortschrittsbalken" angesprochen hast : dafür gibt es ShFile ( benötigt ot4xb )
es ist die API vom Explorer, wenn man damit Dateien kopiert/löscht/move, und zeigt einem auch die entsprechende Animation mit dem Progressbar.

http://www.xbaseforum.de/viewtopic.php? ... ile#p56170
http://www.xbaseforum.de/viewtopic.php? ... ile#p70547
http://www.xbaseforum.de/viewtopic.php? ... ile#p79632

p.s. wenn es sich um ein Backup handelt könnte man es auch, mit Bordmittel, "ZIP"pen
siehe "Copyhere" API http://www.xbaseforum.de/viewtopic.php? ... lit=shfile
gruss by OHR
Jimmy

Benutzeravatar
komnick
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 38
Registriert: Mi, 04. Jun 2014 9:56
Wohnort: Berlin

Re: FILECOPY(=

Beitrag von komnick » Fr, 08. Aug 2014 8:55

Hallo Dieter,

ersetze dein FILECOPY() doch mal durch eine selbstgebastelte Kopierfunktion, die dir eine konkretere Fehlermeldung liefert, z.B. diese:

Code: Alles auswählen

#include "fileio.ch"

FUNCTION mycopy(quelle, ziel)

#xtranslate BLOCKGROESSE => 60000

LOCAL handleq
LOCAL handlez
LOCAL cBuffer := ""
LOCAL iSize

IF !FILE(quelle)
   ALERT(quelle+" existiert nicht.")
   RETURN .F.
ENDIF

handleq := FOPEN(quelle, FO_READ)
IF handleq < 0
   ALERT("FOPEN("+quelle+") scheitert.")
   RETURN .F.
ENDIF

handlez := FCREATE(ziel, FC_NORMAL)
IF handlez < 0
   ALERT("FCREATE("+ziel+") scheitert.")
   FCLOSE(handleq)
   RETURN .F.
ENDIF

cBuffer := SPACE(BLOCKGROESSE)
DO WHILE .T.
   iSize := FREAD(handleq, @cBuffer, BLOCKGROESSE)
   
   IF EMPTY(iSize) 
      EXIT
   ENDIF
         
   IF FWRITE(handlez, cBuffer, iSize) # iSize
      ALERT("FWRITE("+ziel+") scheitert. ("+str(FERROR(),2)+")")
      FCLOSE(handleq)
      FCLOSE(handlez)
      RETURN .F.
   ENDIF
   
   IF iSize # BLOCKGROESSE
      EXIT
   ENDIF
ENDDO
      
FCLOSE(handleq)
FCLOSE(handlez)
RETURN .T.

* -EOP- mycopy
Ferner würde mich interessieren, ob dieselben Files nicht kopiert werden, wenn du das Zielverzeichnis leerst und die Dateien in anderer - z.B. genau umgekehrter - Reihenfolge kopierst.

Gruß
Martin

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14632
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: FILECOPY(=

Beitrag von brandelh » Fr, 08. Aug 2014 9:40

Bitte beachten, wir sind hier im CLIPPER Forum, daher vermute ich er verwendet CLIPPER als compiler :!:
Gruß
Hubert

Benutzeravatar
sherlogg
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 48
Registriert: Mo, 19. Nov 2012 14:59
Wohnort: Mühlheim am Main
Kontaktdaten:

Re: FILECOPY(=

Beitrag von sherlogg » Fr, 08. Aug 2014 18:06

Ja, hier geht es noch um Clipper.

Hallo Martin, werde ich mal testen (sowohl selbst gebastelte Routine als auch die Reihenfolge umkehren). Danke!

Gruß, Dieter

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11554
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: FILECOPY(=

Beitrag von AUGE_OHR » Fr, 08. Aug 2014 19:47

sherlogg hat geschrieben:Ja, hier geht es noch um Clipper.
aber du hast doch auch Xbase++, oder ?
man kann ja auch eine Xbase++ Applikation aus Cl*pper per RUN Befehl ausführen ...
gruss by OHR
Jimmy

Benutzeravatar
sherlogg
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 48
Registriert: Mo, 19. Nov 2012 14:59
Wohnort: Mühlheim am Main
Kontaktdaten:

Re: FILECOPY(=

Beitrag von sherlogg » Fr, 08. Aug 2014 22:07

Hallo Jimmy,

ja, ich habe auch xBase++.

Werde ich mir mal einen Kopf machen.

Danke!

Gruß, Dieter

Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1561
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern

Re: FILECOPY(=

Beitrag von Werner_Bayern » Sa, 09. Aug 2014 12:45

Werner_Bayern hat geschrieben:mal testen mit

Code: Alles auswählen

copy file (cQuelle) to (cZiel)
?
Hats funktioniert? Hab gerade nachgesehen, den gibt's unter Clipper.
es grüßt euch

Werner

Antworten