Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291

    VB6-Copia dei files elaborati.

    In un programma recentemente ultimato ho previsto la possibilità d'effettuare una copia dei files (DataBase ed altri) senza uscire dall'applicazione. Il codice di per sè funziona egregiamente, ma incorre spesso in una caratteristica di Win, quella di impedire la copia dei files qualora l'attributo della cartella che li contiene (e quindi anche dei relativi files) sia settata su "solo lettura". Questa indubbiamente è una caratteristica utile, ma nel caso specifico è una gran rottura ... .
    C'è a vostro avviso un modo di rilevare la predetta caratteristica (solo lettura) prima della fase di copia e quindi predisporre il codice per deselezionare l'attributo "sola lettura" ?
    Grazie per le risposte.
    LM

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    In VB esiste la

    GetAttr

    e la

    SetAttr

    per la gestione degli attributi.

    Dai un'occhiata nell'help per i dettagli ...

  3. #3
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Oregon grazie per il tuo interessamento al mio problema.
    Ho fatto una prova:
    codice:
    Private Sub Command1_Click()
        Dim MyDir
        Dim MyFile
        
        ' Controlla l'esistenza della Directory:
        If Dir("D:\TestXX", vbDirectory) <> "" Then
            MyDir = GetAttr("D:\TestXX")
            MsgBox "La Directory esiste.  " & "Valore attribuito  " & MyDir
                ' Controlla l'esistenza del file:
                If Dir("D:\TestXX\ProvaYY.bmp") <> "" Then
                    MyFile = GetAttr("D:\TestXX\ProvaYY.bmp")
                    MsgBox "Il file esiste.  " & "Valore attribuito  " & MyFile
                    Else: MsgBox "Il file non esiste."
                End If
            Else: MsgBox "La Directory non esiste."
        End If
    
    End Sub
    Dunque nel caso specifico [MyFile = GetAttr("D:\TestXX\ProvaYY.bmp")]
    restituisce il valore 33. Ovvero: vbArchive 32 + vbReadOnly 1 .
    La fase successiva del settaggio, affinchè il file sia libero, qual'è ?
    Scusa, per essere più chiaro: su quale di questi valori devo settare
    vbNormal 0 Normale.
    vbReadOnly 1 Sola lettura.
    vbHidden 2 Nascosto.
    vbSystem 4 File di sistema.
    vbDirectory 16 Directory o cartella.
    vbArchive 32 Il file è stato modificato dall'ultimo backup.
    LM

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Se l'intenzione e' togliere l'attributo Readonly, devi settare lo stesso valore letto - 1

  5. #5
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Scusa Oregon, temo di non aver capito:
    codice:
    Se l'intenzione e' togliere l'attributo Readonly, devi settare lo stesso valore letto - 1
    Vorrei una conferma, dato che è da tempo che giro intorno al problema senza trovare una soluzione valida! Quindi dovrei settare, attribuire, ai files "vbArchive" (valore 32)? Se è così, devo dare l'attributo a tutti i files, con un ciclo, o alla sola cartella che contiene i files? Se ti è possibile dammi una risposta definitiva.
    LM

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    La mia era una risposta definitiva ...

    Devi attribuire (a cartelle e file) il valore dell'attributo che possevano escludendo quello di read only.

    Per eliminarlo ti consiglio questo codice

    FileName = "D:\TestXX\ProvaYY.bmp"

    SetAttr FileName, GetAttr(FileName) And &hFFFE

    mentre per aggiungere il flag di read-only

    SetAttr FileName, GetAttr(FileName) Or 1

    Se non sono stato chiaro, fai un fischio ...

  7. #7
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Eri stato chiaro anche prima, ma volevo essere sicuro ...
    Quindi per togliere l'attributo di sola lettura:

    FileName = "D:\TestXX\ProvaYY.bmp"
    SetAttr FileName, GetAttr(FileName) And &hFFFE

    Grazie ancora.
    LM

  8. #8
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Di seguito riporto il codice definitivo, che sembra funzionare, nel caso che a qualcuno dovesse servire:
    codice:
    Private Sub Command1_Click()
        
        Dim MyDir As Long
        Dim MyFile As Long
        Dim FileWayCopy As String
        
        ' Controlla l'esistenza della Directory da cui copiare il file:
        If Dir("D:\TestXX", vbDirectory) <> "" Then
            ' Legge il valore dell'attributo della directory:
            MyDir = GetAttr("D:\TestXX")
            MsgBox "La Directory esiste.  " & "Valore attribuito  " & MyDir
                ' Controlla l'esistenza del file da copiare:
                If Dir("D:\TestXX\ProvaYY.bmp") <> "" Then
                    FileWayCopy = "D:\TestXX\ProvaYY.bmp"
                    ' Legge il valore dell'attributo della directory e del file:
                    MyFile = GetAttr("D:\TestXX\ProvaYY.bmp")
                    MsgBox "Il file esiste.  " & "Valore attribuito  " & MyFile
                    If MyFile > 32 Or MyFile = 1 Then
                        ' Toglie l'attributo di sola lettura:
                        SetAttr FileWayCopy, GetAttr(FileWayCopy) And &HFFFE
                        ' Legge il nuovo valore dell'attributo della directory e del file:
                        MyFile = GetAttr("D:\TestXX\ProvaYY.bmp")
                        MsgBox "Il file esiste.  " & "Valore attribuito  " & MyFile
                    End If
                    Else: MsgBox "Il file non esiste."
                End If
            Else: MsgBox "La Directory non esiste."
        End If
    End Sub
    LM

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Una imprecisione solamente ...

    attribuito

    deve essere

    attributi

  10. #10
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Non ti sfugge nulla ! ... Comunque hai ragione.
    LM

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.