Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - Problema Copia File
Forum - Visual Basic 6 - Problema Copia File

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Nesher (Normal User)
Rookie


Messaggi: 45
Iscritto: 02/09/2009

Segnala al moderatore
Postato alle 15:31
Martedì, 22/09/2009
Salve ragazzi....avrei qlcs da chiedere...ho realizzato un tool per fare il backup...ma mi sono accorto con mia amarezza..che qnd copio il file seppure me li copia mi da dimensione 0...vi posto il codice grazie per l'aiuto

Codice in vb6

Function CopiaFile(origine As String, destinazione As String) As Long
Const BufferSize = 1024 'settaggio del buffer
Static Buf$
Dim BTest!, FSize!
Dim Chunk%, F1%, F2%
LunghezzaFileDestinazione = 0
    Open origine For Binary As #1 ' Apre il file.
        Flunghezza = LOF(1) ' Ottiene la lunghezza del file.
    Open destinazione For Binary As #2 ' Apre il file.
        BTest = Flunghezza - LOF(2)
    Do
        If BTest < BufferSize Then
            Chunk = BTest
        Else
            Chunk = BufferSize
        End If
        Buf = String(Chunk, " ")
        Get 1, , Buf
        Put 2, , Buf
        BTest = Flunghezza - LOF(2)
    Loop Until BTest = 0
    Close 1 'closes the source file
    Close 2 'closes the destination file
End Function

Private Sub cmdAvviaCopia_Click()
Dim e As String
Dim sTempFile() As String
Dim sTemp() As String
Dim sFile As String
Dim sFileDest As String
Dim sMsg As String
Dim I As Integer
    Dir1.Enabled = False
    File1.Enabled = False
    For I = 0 To listFile.ListCount - 1
        PB1.Max = listFile.ListCount
        PB1.Min = 0
        lblOrigine.Caption = ""
        lblDestinazione.Caption = ""
        If listFile.Selected(I) = True Then
            lavoro = Text1.Text
            files = Dir1.Path & "\" & listFile.List(I)
            sFile = listFile.List(I)
            e = CopiaFile(sFile, Text1 & "\" & sFile)
            lblOrigine.Caption = " " & Dir1.Path & "\" & sFile
            lblDestinazione.Caption = " " & Text1 & "\" & sFile
        End If
        lblFile.Caption = " " & sFile
        PB1.Value = PB1.Min + 1
    Next I
    MsgBox "La Copia dei file selezionati è stata effettuata con successo", vbInformation
    Dir1.Enabled = True
    File1.Enabled = True
End Sub

Ecco perkè pur copiandomi il file mi da dimensione 0 byte?

Ultima modifica effettuata da Nesher il 22/09/2009 alle 15:34
PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 15:59
Martedì, 22/09/2009
usare la semplice istruzione filecopy no?

PM Quote
Avatar
Nesher (Normal User)
Rookie


Messaggi: 45
Iscritto: 02/09/2009

Segnala al moderatore
Postato alle 16:04
Martedì, 22/09/2009
stesso problema mio caro amico..sempre byte 0...:(

PM Quote
Avatar
Louis (Normal User)
Pro


Messaggi: 150
Iscritto: 22/04/2008

Segnala al moderatore
Postato alle 16:34
Martedì, 22/09/2009
Nesher perché non usi SHFILEOPSTRUCT per copiare ed eliminare i files. Ti posto le routines d'esempio.
In un Modulo bas:
Codice sorgente - presumibilmente C#

  1. Option Explicit
  2.  
  3.         Public Const FO_MOVE As Long = &H1
  4.         Public Const FO_COPY As Long = &H2
  5.         Public Const FO_DELETE As Long = &H3
  6.         Public Const FO_RENAME As Long = &H4
  7.         Public Const FOF_MULTIDESTFILES As Long = &H1
  8.         Public Const FOF_CONFIRMMOUSE As Long = &H2
  9.         Public Const FOF_SILENT As Long = &H4
  10.         Public Const FOF_RENAMEONCOLLISION As Long = &H8
  11.         Public Const FOF_NOCONFIRMATION As Long = &H10
  12.         Public Const FOF_WANTMAPPINGHANDLE As Long = &H20
  13.         Public Const FOF_CREATEPROGRESSDLG As Long = &H0
  14.         Public Const FOF_ALLOWUNDO As Long = &H40
  15.         Public Const FOF_FILESONLY As Long = &H80
  16.         Public Const FOF_SIMPLEPROGRESS As Long = &H100
  17.         Public Const FOF_NOCONFIRMMKDIR As Long = &H200
  18.  
  19.         Type SHFILEOPSTRUCT
  20.            hwnd As Long
  21.            wFunc As Long
  22.            pFrom As String
  23.            pTo As String
  24.            fFlags As Long
  25.            fAnyOperationsAborted As Long
  26.            hNameMappings As Long
  27.            lpszProgressTitle As String
  28.         End Type
  29.         Declare Function SHFileOperation Lib "Shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
  30.         Public result As Long
  31. '-----------------------------------
  32. Public Sub GestErr()
  33. 'Analizza il numero di errore e carica il messaggio:
  34.         Select Case result
  35.                 'Nessun Errore :
  36.                Case 0
  37.                    MsgBox result & "  -  La copia dei files o della cartella è avvenuta con successo", vbInformation, "Prova Copia dei files"
  38.                
  39.                'Errore 7 Operazione fermata:
  40.                 Case 7
  41.                     MsgBox result & "  -  L'operazione è stata fermata", vbInformation, "Prova Copia dei files"
  42.                 'Errore 183 Operazione annullata:
  43.                Case 183
  44.                    MsgBox result & "  -  L'operazione è stata annullata", vbInformation, "Prova Copia dei files"
  45.        End Select
  46. End Sub



Nel modulo della Frm:

Codice sorgente - presumibilmente VB.NET

  1. Option Explicit
  2. '-----------------------------------
  3. ' Comando copia del file:
  4. Private Sub Command1_Click()
  5.          
  6.          Dim fileop As SHFILEOPSTRUCT
  7.          With fileop
  8.             .hwnd = Me.hwnd
  9.  
  10.             .wFunc = FO_COPY
  11.         ' Cartella di origine della copia:
  12.             .pFrom = "C:\Documents and Settings\Administrator\Documenti\Scarica\ImmagCom\API7.BMP" & vbNullChar & vbNullChar
  13.                        
  14.             '.pFrom = "C:\PROGRAM FILES\MICROSOFT VISUAL BASIC\VB.HLP" & _
  15.                vbNullChar & _
  16.                "C:\PROGRAM FILES\MICROSOFT VISUAL BASIC\VB.CNT" & _
  17.                vbNullChar & vbNullChar
  18.  
  19.             'or to copy all files use this line
  20.             '.pFrom = "C:\*.*" & vbNullChar & vbNullChar
  21.  
  22.             'The directory or the filenames to copy into. They are terminated by using
  23.             'two nulls.
  24.             '.pTo = "C:\testfolder\" & vbNullChar & vbNullChar
  25.  
  26.         ' Cartella di destinazione della copia:
  27.             .pTo = App.Path & "\Test3\" & vbNullChar & vbNullChar
  28.             .fFlags = FOF_SIMPLEPROGRESS Or FOF_FILESONLY
  29.          End With
  30.  
  31.          result = SHFileOperation(fileop)
  32.            
  33.     ' Errore nella copia o Operazione annullata:
  34.         If result <> 0 Then
  35.             Call GestErr
  36.             Exit Sub
  37.             Else
  38.             If fileop.fAnyOperationsAborted <> 0 Then
  39.                 MsgBox fileop.fAnyOperationsAborted, , "Operation Aborted"
  40.             End If
  41.         End If
  42.     ' Operazione conclusa con seccesso:
  43.         If result = 0 Then
  44.             Call GestErr
  45.         End If
  46.            
  47.       End Sub
  48. '-----------------------------------
  49. ' Cancella e porta il file nel Cestino:
  50.       Private Sub Command2_Click()
  51.          
  52.          Dim DelFileOp As SHFILEOPSTRUCT
  53.          Dim result As Long
  54.          
  55.          With DelFileOp
  56.             .hwnd = Me.hwnd
  57.             .wFunc = FO_DELETE
  58.             ' Percorso e nome Origine del Files:
  59.             .pFrom = App.Path & "\Test4\*.*" & vbNullChar & vbNullChar
  60.             ' Sposta il file nel cestino:
  61.             .fFlags = FOF_ALLOWUNDO
  62.          End With
  63.          result = SHFileOperation(DelFileOp)
  64.  
  65.         If DelFileOp.fAnyOperationsAborted <> 0 Then
  66.             MsgBox DelFileOp.fAnyOperationsAborted, , "Operation Aborted"
  67.         End If
  68.  
  69.       End Sub
  70. '-----------------------------------
  71. Private Sub Form_Load()
  72.     Command1.Caption = "Test Copia"
  73.     Command2.Caption = "Test Recycle"
  74. End Sub



Il codice l'ho provato e sembra funzionare, deve essere comunque adattato alle tue esigenze. ;)

PM Quote
Avatar
Nesher (Normal User)
Rookie


Messaggi: 45
Iscritto: 02/09/2009

Segnala al moderatore
Postato alle 9:51
Mercoledì, 23/09/2009
Ti ringrazio Louis..ma mi copia i file ma mi da sempre dimensione 0....anche cn il tuo metodo

PM Quote
Avatar
Louis (Normal User)
Pro


Messaggi: 150
Iscritto: 22/04/2008

Segnala al moderatore
Postato alle 10:00
Mercoledì, 23/09/2009
Ma allora cerchi solo il peso del file prima della copia?

PM Quote
Avatar
Nesher (Normal User)
Rookie


Messaggi: 45
Iscritto: 02/09/2009

Segnala al moderatore
Postato alle 10:08
Mercoledì, 23/09/2009
Allora....io devo copiare dei file da una cartella ad un altra...me li copia ma mi da 0 byte come dimensione...e non me li apre giustamente

PM Quote
Avatar
Nesher (Normal User)
Rookie


Messaggi: 45
Iscritto: 02/09/2009

Segnala al moderatore
Postato alle 10:53
Mercoledì, 23/09/2009
Ragazzi....qlcn ha qlc idea...per cortesia...grazie

PM Quote
Avatar
Louis (Normal User)
Pro


Messaggi: 150
Iscritto: 22/04/2008

Segnala al moderatore
Postato alle 15:20
Mercoledì, 23/09/2009
Mah, non é possibile; prima di postare ho provato la routine e funziona benissimo!
A mio avviso i files o la cartella sono protetti in sola lettura; qualora fosse così dovresti verificare il valore dell'attributo per poi cambiarlo e fare la copia.
Fammi sapere che posso postare una routine per il problema.  

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo