Deutsch
Forum

Copy und UNC-Pfade

 
Irre ich mich oder konnte Copy  mal von UNCs ala \serverfolderfile kopieren - was jetzt mit X10 nicht mehr geht?! Vlt. wg. der Neuerung seit X9 mit den Dateiattributen?

FileExists  und assign  hingegen haben kein Problem...
 
25.10.2006  
 




RGH
Während ich früher den Copy in Delphi selbst geschrieben hatte, so benutze ich wegen der Attributgeschichte seit 9.x die Windows-API. Das mag diese Änderung erklären.
Bei Assign, etc. baue ich immer noch auf solide Handarbeit. ;) Daher solltest Du mit BlockRead/BlockWrite einen Zweizeiler hinbekommen, der das Copy mit alten Qualitäten (und Unzulänglichkeiten bezüglich der Attribute) hinbekommt.

Gruß
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
25.10.2006  
 



Jupp hab ich hab mir grad hierfür nen fcopy geschrieben:
KompilierenMarkierenSeparieren
proc fcopy(from$,to$)

    casenot fileexists(from$) : return false
    var fmode&:=get("FileMode")
    set("FileMode",2)
    var fh&:=assign(from$)

    if fh&

        openrw fh&
        var siz&:=getfilesize(fh&)

        if siz&

            declare mem#
            dim mem#,siz&
            var bytesRead&:=blockread(fh&,mem#,0,siz&)
            closerw fh&
            fh&:=assign(to$)
            openrw fh&
            blockwrite fh&,mem#,0,bytesRead&
            closerw fh&
            dispose mem#

        else

            closerw fh&
            fh&:=assign(to$)
            openrw fh&
            closerw fh&

        endif

        assign fh&,""

    endif

    set("FileMode",fmode&)
    return true

endproc

Klappt nun wieder bestens.

<offtopic>
KompilierenMarkierenSeparieren
proc FCOPY

    PARAMETERS FROM$,TO$

    IFNOT FILEEXISTS(FROM$)

        RETURN 0

    ENDIF

    VAR FMODE&=GET("FileMode")
    SET("FileMode",2)
    VAR FH&=ASSIGN(FROM$)

    IF FH&

        OPENRW FH&
        VAR SIZ&=GETFILESIZE(FH&)

        IF SIZ&

            DECLARE MEM#
            DIM MEM#,SIZ&
            VAR BYTESREAD&=BLOCKREAD(FH&,MEM#,0,SIZ&)
            CLOSERW FH&
            FH&=ASSIGN(TO$)
            OPENRW FH&
            BLOCKWRITE FH&,MEM#,0,BYTESREAD&
            CLOSERW FH&
            DISPOSE MEM#

        ELSE

            CLOSERW FH&
            FH&=ASSIGN(TO$)
            OPENRW FH&
            CLOSERW FH&

        ENDIF

        ASSIGN FH&,""

    ENDIF

    SET("FileMode",FMODE&)
    RETURN 1

endproc

</offtopic>
 
25.10.2006  
 




RGH
... und mit der erweiterten Funktionalität von XProfan 10 für BlockWrite/BlockRead geht es noch dfeutlich kürzer bei exakt gleicher Funktionalität:
KompilierenMarkierenSeparieren
!Proc fcopy
parameters from$,to$
CaseNot FileExists(from$) : Return 0
Var siz& = FileSize(from$)
Case siz& = 0 : return 0
Declare mem#
Dim mem#,siz&
Var bytesRead& = BlockRead(from$, mem#, 0, siz&)
BlockWrite to$, mem#, 0, bytesRead&
Return 1

EndProc


Gruß
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
25.10.2006  
 



Dim mem#,0 führt doch aber zum Absturz... ^^

Irgendwie glaube ich dennoch mir bei jeder Zeile meiner Programmierungen etwas dabei gedacht zu haben ^^

Die Set-Geschickte hast Du auch ausser Acht gelassen - sind die Bemühungen in meiner Proc unnütz?

Dein FCopy ist dank der neuen XProfan10-Funktionalitäten (welche ich wohl erst alle noch inne haben muß) trotzdem schicker.
 
25.10.2006  
 




Jörg
Sellmeyer
Hab ich jetzt eigentlich irgendwas verpasst?
KompilierenMarkierenSeparieren
Var siz& = FileSize(from$)

David hat das Var auch schon des öfteren benutzt und ich dachte, das sei ein XPSE-Feature.
Aber wenns der Scheff selber schon benutzt
Die Hilfe sagt jedenfalls nichts dazu...
Gruß
Jörg
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
25.10.2006  
 



Probieren geht über studieren.
 
25.10.2006  
 




RGH
[quote:c5a4b2e81b=iF]Dim mem#,0 führt doch aber zum Absturz... ^^[/quote:c5a4b2e81b]
Das sollte zwar nicht zum Absturz führen, aber ich erweitere meinen Code oben entsprechend.

[quote:c5a4b2e81b]Die Set-Geschickte hast Du auch ausser Acht gelassen[/quote:c5a4b2e81b]
Habe ich nicht. Das mit dem Filemode macht aber schon BlockRead selbst.

Gruß
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
25.10.2006  
 



Du meinst ein Blockwrite schreibt auch wenn zuvor ein nur Lesen mit Set(FileMode... gesetzt ist?
 
25.10.2006  
 




RGH
[quote:3bb5d4f872=iF]Du meinst ein Blockwrite schreibt auch wenn zuvor ein nur Lesen mit Set(FileMode... gesetzt ist?[/quote:3bb5d4f872]
Ja, BlockWrite(Datei) setzt den Filemode temporär auf 2 und anschließend wieder zurück.
Bei BlockRead(Datei) setze ich ihn allerdings auf Nur Lesen, um auch schreibgeschützte Dateien lesen zu können!

Nachtrag: Das gilt natürlich nur bei den Varianten, wo es um ganze Dateien geht! Ansonsten muß der FileMode vom Programmierer gesetzt werden, bevor er die Datei mir OpenRW öffnet.

Gruß
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
25.10.2006  
 



Ok verstehe.

Dein obiges Beispiel ist aber immer noch nicht ganz korrekt ^^ - Dateien mit der Größe von 0 Byte werden nicht kopiert... *duck*
 
25.10.2006  
 




Jörg
Sellmeyer
[quote:1fed0361f8=iF]Probieren geht über studieren. [/quote:1fed0361f8]
Ist das was Geheimes oder was?
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
25.10.2006  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

7.606 Betrachtungen

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie