Avatar billede fizz Nybegynder
16. marts 2005 - 22:23 Der er 7 kommentarer og
2 løsninger

erstat "windows copy" med hjemmelavet program

hey...

jeg kunne godt tænke mig at lave mit eget kopierings-program, i stedet for den der er som standard i windows...
jeg undrer mig over om det er en fil "copy.exe" eller sån noget som man kan erstatte med sit eget program ;)
Avatar billede joern Nybegynder
16. marts 2005 - 23:05 #1
Hej Fizz.

Hvor længe skal dette soørgsmål så køre?  Du kan jo lægge op til din egen time-out ved at skrive i spørgsmålet at svar efter påske ingen interesse har.

I styresystemet DOS er copy en såkaldt intern kommando, der ligger sammen med en række andre i filen 'command.com'.  Der eksisterer en command.com i win2Km som er det OS jeg anvender, og mon ikke kopiering stadig udføres ved kald til den?

I VB kan du med det reserverede ord 'filecopy' udføre en filkopiering, hvor du angiver kildefilens sti og navn og navn på modtagende mappe, og hvilken filnavn kopien skal lagres med.  filecopy "c:\winnt\command.com", d:\minmappe\fizz.com"

Med drivebox, dirlistbox og filelistbox kan du lave navigeringsmuligheder og med tekstbokse give mulighed for at oprette nye mapper og ændre filnavne.

Men hvorfor dog?  Kender du ikke 'Totalcommander'?  med det kan du alt hvad stifinder kan og mere til.  http://www.totalcommander.dk/index.php

M.v.h. Jørn
Avatar billede fizz Nybegynder
16. marts 2005 - 23:20 #2
naah... det jeg mener med erstatte er så man evt. kunne få lidt mere info når man laver en "drag 'n drop" kopiering af div. filer/mapper.
info såsom mb/s - mb kopieret - mb tilbage - forløben tid - osv..
Avatar billede fizz Nybegynder
16. marts 2005 - 23:21 #3
og.... svar efter d. 1. maj accepteres ikke!!
Avatar billede joern Nybegynder
16. marts 2005 - 23:32 #4
Hej.

Jamen det kan du jo så kaste dig ud i.  Fundamentet er 'filecopy' hvis du vil lave det med VB.  For at kopiere hele mappestrukturer, skal du med MkDir oprette hver ny mappe.  Det regner jeg da med.  Men prøv Totalcommander, der er progresbarer, der viser status for aktuel fil og for hele sessionen.  Jeg tror du kan få alt at vide om MB inden du påbegynder en session.

Jeg står af spørgsmålet, nu skal jeg se DR2 med Katie og kærligheden 5. afsnit.

M.v.h. Jørn
Avatar billede fizz Nybegynder
16. marts 2005 - 23:38 #5
argh! du misforstår mig! jeg er habil VB mand og jeg kender godt totalcommander... men jeg er træt af at glo på den standard kopi-box windows har... jeg vil ha sat min egen ind i stedet for..!!!

og hva faen er det for et mærkeligt program at glo på i TV når jeg har brug for hjælp ?!!?
Avatar billede Nybegynder
17. marts 2005 - 06:00 #6
VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute VB_Name = "clsFileCopy"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Option Explicit

Private Declare Function GetInputState Lib "user32" () As Long

Public Event FileCopyCancelled()
Public Event FileCopyProgress(ByVal BytesCopied As Long, ByVal BytesTotal As Long)
Public Event FileCopyComplete(ByVal OutputSize As Long)

Private bolKeepCopy As Boolean 'Keep copying the file?

Public Function CopyInProgress() As Boolean 'Currently copying a file?
CopyInProgress = bolKeepCopy
End Function

Public Sub CancelFileCopy()
DoEvents
bolKeepCopy = False
DoEvents
End Sub

Public Function VBCopyFile(ByVal SourceFile As String, ByVal DestinationFile As String, ByVal PacketSize As Long, Optional ByVal WithDoEvents As Boolean = False) As Integer
'0 = Successful.
'1 = Copying failed.
'2 = Input error.
On Error Resume Next

Dim bytBuffer() As Byte, lonFFIn As Long, lonPrevPackSize As Long
Dim lonSourceLen As Long, lonDestLen As Long, lonFFOut As Long, lonCurByte As Long

bolKeepCopy = True
lonSourceLen = FileLen(SourceFile)
lonDestLen = FileLen(DestinationFile)
lonCurByte = 0

If lonSourceLen = 0 Then
    VBCopyFile = 2
    Exit Function
End If

If lonDestLen > 0 Then
    Kill DestinationFile
End If

lonFFIn = FreeFile

Open SourceFile For Binary Access Read As #lonFFIn
   
    lonFFOut = FreeFile
   
    Open DestinationFile For Binary Access Write As #lonFFOut
   
        ReDim bytBuffer(1 To PacketSize) As Byte
       
        Do Until (lonSourceLen - lonCurByte) < PacketSize
           
            If bolKeepCopy = False Then
                Exit Do
                GoTo AbortCopy
            End If
   
            Get #lonFFIn, lonCurByte + 1, bytBuffer()
            Put #lonFFOut, lonCurByte + 1, bytBuffer()
            lonCurByte = lonCurByte + PacketSize
            RaiseEvent FileCopyProgress(lonCurByte, lonSourceLen)
           
            If WithDoEvents = True And GetInputState Then DoEvents
           
        Loop
       
        If bolKeepCopy = False Then
            GoTo AbortCopy
        End If
       
        lonPrevPackSize = lonSourceLen - lonCurByte
       
        If lonPrevPackSize > 0 Then
            ReDim bytBuffer(1 To lonPrevPackSize) As Byte
           
            Get #lonFFIn, lonCurByte + 1, bytBuffer()
            Put #lonFFOut, lonCurByte + 1, bytBuffer()
            lonCurByte = lonCurByte + lonPrevPackSize
            RaiseEvent FileCopyProgress(lonCurByte, lonSourceLen)
        End If
   
    Close #lonFFOut

Close #lonFFIn

DoEvents

RaiseEvent FileCopyComplete(FileLen(DestinationFile))

Exit Function

AbortCopy: 'User aborted the copy process, so close both files and trigger the event.
    Close #lonFFOut
    Close #lonFFIn
   
    RaiseEvent FileCopyCancelled
   
    Exit Function
End Function



Dette er en class som måske kan hjælpe dig.

Hilsen Lars
Avatar billede sjh Nybegynder
17. marts 2005 - 08:30 #7
fizz Jeg kan godt se hvad det er du vil, men jeg er også 99% sikker på at det ikke kan laves med vb desværre.

Hvis du lige ser på denne kode:
http://www.vb-helper.com/howto_copy_file_animation.html

Det er Windows egen kopier-boks som bliver kalt fra vb, og det er en funktion som ligger i "shell32.dll".

Men det kan være at det kan laves i C eller C++ eller..
Avatar billede fizz Nybegynder
19. marts 2005 - 20:40 #8
dur ikke
Avatar billede fizz Nybegynder
03. juni 2005 - 23:16 #9
godt forsøgt... men ikke godt nok.... i fortjener lidt point... fordelt efter min vurdering af arbejdsindsats
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester