Italia
Foro

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 Cambiamento 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.

Saluto
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 per 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

c

Saluto
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 Aiuto sagt jedenfalls nichts dazu...
Saluto
Jörg
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
25.10.2006  
 



Probieren geht circa 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.

Saluto
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(File) setzt den Filemode temporär auf 2 und anschließend wieder zurück.
Bei BlockRead(File) setze ich ihn allerdings auf Nur Lesen, um auch schreibgeschützte File lesen zu können!

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

Saluto
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 ^^ - File mit der Dimensione von 0 Byte werden nicht kopiert... *duck*
 
25.10.2006  
 




Jörg
Sellmeyer
[quote:1fed0361f8=iF]Probieren geht circa 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  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

7.635 Views

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


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