Incollare dalla clipboard una cartella

di il
7 risposte

Incollare dalla clipboard una cartella

Oggi sono alle prese con la costruzione di un esplora file. La gran parte del lavoro è fatta, ma ora mi sono scontrato 
con un problema : come incollare dalla clipboard le cartelle.
Non c'è molta documentazione in internet.Ho trovato solo questo codice, che però mi ha un errore 

      Dim data As IDataObject = Clipboard.GetDataObject()	
       If data.GetDataPresent(DataFormats.FileDrop) Then	'verifica se ci sono dati nella cplipboard
           For Each filePath As String In data.GetData(DataFormats.FileDrop)    ('Riferimento a un oggetto non impostato su un'istanza di oggetto")
               ' Specifica la nuova posizione del file
               Dim newFilePath As String = IO.Path.Combine("C:\archivio", IO.Path.GetFileName(filePath))
               ' Copia il file nella nuova posizione
               IO.File.Copy(filePath, newFilePath) 
               (my.computer.filesystem.copydirectory ecc. , se trattasi di directory)
           Next
       End If
Mi aiutate a risolvere? Buona domenica a tutti.
Grazie mille

7 Risposte

  • Re: Incollare dalla clipboard una cartella

    Errore? Quale? 

    Perchè non lo dici?

  • Re: Incollare dalla clipboard una cartella

    18/02/2024 - oregon ha scritto:


    Errore? Quale? 

    E' nel testo.Nella terza riga del codice indicato('Riferimento a un oggetto non impostato su un'istanza di oggetto")

  • Re: Incollare dalla clipboard una cartella

    Veramente hai inserito tutto nel box del codice, sia la tua spiegazione che il messaggio d'errore.

    Nel box ci va solo il codice e tutto il resto fuori in maniera che sia leggibile

  • Re: Incollare dalla clipboard una cartella

    18/02/2024 - oregon ha scritto:


    Veramente hai inserito tutto nel box del codice, sia la tua spiegazione che il messaggio d'errore.

    Nel box ci va solo il codice e tutto il resto fuori in maniera che sia leghibile

    E' vero.

    Chiedo scusa.

  • Re: Incollare dalla clipboard una cartella

    Molto probabilmente la riga 

    For Each filePath As String In data.GetData(DataFormats.FileDrop)

    ti va in errore perchè data.GetData() non ti ritorna necessariamente stringhe

    Prova ad esempio a modificarla in

    For Each filePath As String? In data.GetData(DataFormats.FileDrop)

    oppure puoi prima fare una cosa tipo

    Dim dati = data.GetData(DataFormats.FileDrop)

    e poi vai a guardare che cosa ti ha restituito, ovviamente un array di object ma non è detto che tutti questi oggetti siano stringhe

  • Re: Incollare dalla clipboard una cartella

    SirJo. Grazie per il tuo intevento. Cortese come sempre.

    Ti rispondo in ritardo perchè ho effettuato altre prove alla ricerca di una soluzione, che non è venuta.

    Ho messo in atto i tuoi suggerimenti, ma con esito negativo:

    For Each filePath As String? In data.GetData(DataFormats.FileDrop) mi restituisce un errore (il ? deve essere legato a structure)

    Dim dati =data.getdata(dataformats.filedrop = restituisce nothing

    Ora, dopo qualche ricerca mi sono convinto che -anzitutto- è l'operazione di copia che non funziona!

    Copiando un file da applicativo, ho provato ad incollarlo sul desktop. Incolla è attivo, ma non incolla nulla. Emette solo un beep.

        Private Sub copia_Click(sender As Object, e As EventArgs) Handles Button1.Click
           'percorso completo del file da copiare
           Dim source = percorso & "\" & lvFile.SelectedItems.Item(0).Text
           ' oggetto DataObject contenente il percorso del file
           Dim dataObj As New DataObject(DataFormats.FileDrop, source)
           ' Pulisci la clipboard e imposta l'oggetto dati
           Clipboard.Clear()
           Clipboard.SetDataObject(dataObj)
       End Sub

    Buona serata.

  • Re: Incollare dalla clipboard una cartella

    Ho risolto così , ma accetterò ogni più esperto suggerimento:

    
        Private Sub copia_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim source = percorso & "\" & lvFile.SelectedItems.Item(0).Text
            Clipboard.Clear()
            My.Computer.Clipboard.SetData("specialformat", source)
            lvFile.Items(0).Selected = False
            Label2.ForeColor = Color.Red
        End Sub
    
        Private Sub incolla_Click(sender As Object, e As EventArgs) Handles Button2.Click
            Dim a = percorso & "\" & lvFile.SelectedItems.Item(0).Text
            Dim source As Object = My.Computer.Clipboard.GetData("specialformat")
            'source deve essere copiato in "a" (percorso selezionato)
    
            If a.Contains(source) Then
                MsgBox("Seleziona la directory di destinazione e poi clicca su incolla")
                Exit Sub
            End If
    
            Dim nomeFileDirectory As String = source.ToString.Substring(source.ToString.LastIndexOf("\") + 1)
            Dim dest As String = a & "\" & nomeFileDirectory
            Dim attributes = IO.File.GetAttributes(source)
            If attributes = IO.FileAttributes.Directory Then
                My.Computer.FileSystem.CopyDirectory(source, dest)
            Else
                IO.File.Copy(source, dest)
            End If
    
        End Sub
Devi accedere o registrarti per scrivere nel forum
7 risposte