Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 19 su 19
  1. #11
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    14
    Ciao, non c'è che dire, grazie mille, ma rimane il problema che riesco a copiare solo il file e non la struttura dell'oggetto selezionato che nella listbox visualizzo così C:\ Cartella1\Cartella2\Cartella3\Cartella4\File.txt
    Call Copy(FilesListBox.SelectedItem, "C:\Users\Public\Documents\Software")

    oppure riesco a copiare la cartella all'interno della quale faccio la ricerca, ma con tutte le sottocartelle e tutti i file
    Call Copy(folderpath, "C:\Users\Public\Documents\Software")


    nella funzione utilizzo:

    Dim SHFileOp AsSHFILEOPSTRUCT
    With SHFileOp
    .wFunc = FO_COPY
    .pFrom = source
    .pTo = target

  2. #12
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    E' difficile capire senza vedere cosa e come fai.
    Prepara un progetto di esempio, zippalo e pubblicalo così possiamo darci un'occhiata.

  3. #13
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    14

    Esportazione dei file presenti in una filelistbox

    WindowsApplication3.zip

    Ciao allego una bozza del progetto. all'interno trovati anche un "leggimi.txt"

    sono naturalmente a disposizione per qualsiasi informazione.

    Ti ringrazio per il supporto dato.

    Ciao

  4. #14
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Ho esaminato il tuo codice, ed è ovvio che non funzioni, perché tu stai cercando di copiare l'intera struttura di origine sulla cartella di destinazione.


    Devi prendere il nome del file dal listbox e ricreare il percorso finale a partire dalla 'fine' della cartella di ricerca. Ti faccio un esempio pratico:

    ' la cartella da cui parte la ricerca
    codice:
    Dim StartFolder As String = "C:\Users\Unknown\Desktop\Progetto_base\cercaifilequi\"
    Tu vuoi copiare i file qui:
    codice:
    Dim TargetFolder as string = "C:\Users\Public\Documents\Estrazione\"
    è chiaro che devi indicare alla SHFileOperation il percorso completo di destinazione, per cui dovrai sostituire StarFolder con TargetFolder, mantenendo il resto del percorso del file, cartelle incluse (puoi usare un semplice Replace). Per essere più chiari:

    se il file di origine è :
    "C:\Users\Unknown\Desktop\Progetto_base\cercaifileq ui\Marco\Pippo\nota.txt"

    il percorso di destinazione che devi passare alla funzione dovrà essere:
    "C:\Users\Public\Documents\Estrazione\Marco\Pippo\nota.txt"


    Questo, ovviamente, andrà fatto per ogni file, perché ogni file ha un percorso differente.
    Ma il vantaggio sarà che è la funzione che si incarica di ricreare tutta la struttura delle cartelle.

    Nel tuo codice, dato che non hai usato il flag FOF_SILENT, la SHFileOperation ti avviserà ogni volta che la cartella di destinazione non esiste e ti chiederà conferma se crearla o meno (c'è comunque il checkbox che ti permette di evitare questo le volte successive.
    Ma se usi il flag FOF_SILENT la creazione diventa automatica (silente, appunto).


  5. #15
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    14
    Mi sembra di capire però che così funzioni solo se la cartella di origine è sempre la stessa, ma io potrei avere i file in

    "C:\Users\Unknown\Desktop\Progetto_base\cercaifileq ui\Marco\Pippo\nota.txt"
    ma anche in
    "C:\Programmi\Windows_application\Marco\Pippo\nota.txt"
    senza contare che non funzionerebbe su un pc differente.

  6. #16
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    14
    Comunque funziona ed è una f..g...ta pazzaesca!!
    Senza contare che se non ci fosse un metodo per identificare la cartella da sostituire anche su altri pc, mi basta fare così:

    Dim Startfolder As String = "C:\"
    Dim Targetfolder As String = "C:\Users\Public\Documents\Estrazione\"
    Dim Finalfolder As String = Replace(FilesListBox.SelectedItem, Startfolder, Targetfolder)
    MsgBox("The file has been moved to:" & vbCrLf & Finalfolder.ToString)
    'copy whole folder including subdirectories
    Call Copy(FilesListBox.SelectedItem.ToString, Finalfolder)

    Creando magari una path più lunga ma comunque indicando con una messagebox dove vengono salvate le cartelle.

    tu che ne pensi? c'è un metodo generico per rendere il programma versatile o va bene la mia soluzione?

    P.S. avevo commentato il silent per vedere se mi dava l'avviso di sovrascrittura del file :-) e lo fa, ma penso che lo userò

    Grazie 1000

  7. #17
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Metodo generico e più versatile?
    Dipende sempre da ciò che si desidera ottenere.
    Partendo da una lista di file (come nel tuo FilesListBox) è possibile eseguire un loop e decidere file per file come procedere, a seconda della propria 'cartella sorgente':
    Volendo copiare una serie di file TXT in:

    C:\Users\Public\Personaggi\Cartoni

    le cui cartelle sorgenti sono differenti:

    C:\pippo\pluto\paperino\topolino.txt
    C:\pippo\pluto\paperino\paperone.txt
    C:\pippo\pluto\paperino\pitagora.txt
    C:\pippo\pluto\PAPERINA\qui.txt
    C:\pippo\pluto\PAPERINA\quo.txt
    C:\pippo\pluto\PAPERINA\qua.txt

    - se la cartella sorgente è C:\pippo\pluto\paperino\ allora prendi come StartFolder C:\pippo\pluto\paperino\
    - se la cartella sorgente del file è C:\pippo\pluto\PAPERINA\ allora prendi come StartFolder C:\pippo\pluto\PAPERINA\

    Questo potrebbe risponderebbe in parte al tuo quesito precedente in cui i file hanno 'sorgenti' diverse.

    Si potrebbe anche creare una funzione per parametrizzare tale procedura (anzi converrebbe proprio)

    Come vedi si può fare di tutto e di più, prima di passare i parametri alla tua funzione Copy(...)
    Una volta capiti quali sono i 'mattoncini' da usare, il limite è solo quello della... fantasia.


  8. #18
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    14
    Si hai ragione, si può fare di tutto e di più, grazie anche ai tuoi "MATTONCINI".
    per il momento l'ho gestita così, ma sto cercando un modo per dirgli che se il selected.item inizia per una lettera che è uguale ad una lettera dell'alfabeto, allora la Starttfolder sarà la lettera corrispondente +":\"

    If FilesListBox.SelectedItem.ToString.StartsWith("C") Then
    Dim Startfolder As String = "C:\"
    Dim Targetfolder As String = My.Computer.FileSystem.CurrentDirectory & "\Software\"
    Dim Finalfolder As String = Replace(FilesListBox.SelectedItem, Startfolder, Targetfolder)
    MsgBox("The file has been moved to:" & vbCrLf & Finalfolder.ToString)
    Call Copy(FilesListBox.SelectedItem, Finalfolder) ' copy all text files In a folder

    ElseIf FilesListBox.SelectedItem.ToString.StartsWith("D") Then
    Dim Startfolder As String = "D:\"
    Dim Targetfolder As String = My.Computer.FileSystem.CurrentDirectory & "\Software\"
    Dim Finalfolder As String = Replace(FilesListBox.SelectedItem, Startfolder, Targetfolder)
    MsgBox("The file has been moved to:" & vbCrLf & Finalfolder.ToString)
    Call Copy(FilesListBox.SelectedItem.ToString, Finalfolder) ' copy all text files In a folder

    per ora mi sono limitato alle lettere di unità più comuni..

  9. #19
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    14
    Se mi permettete posto la soluzione finale, a qualcuno potrebbe servire.

    @Gibra, perch� a volte, e credo lo faccia quando la cartella di destinazione � aperta crea il file finale "Pippo.txt" COME CARTELLA Pippo.txt (vuota)?

    Segue soluzione finale:

    Dim dir As String = ("QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxc vbnm")
    Dim proceed As Boolean
    Dim firstletter As String = FilesListBox.SelectedItem.ToString.Chars(0)
    If dir.ToString.Contains(firstletter) Then
    proceed = True
    firstletter = firstletter & ":\"
    Else
    proceed = False
    End If
    If proceed = True Then
    Dim Startfolder As String = firstletter
    Dim Targetfolder As String = "C:\Users\Public\Documents\Software\"
    ' My.Computer.FileSystem.CurrentDirectory + "\Software\"
    Dim Finalfolder As String = Replace(FilesListBox.SelectedItem, Startfolder, Targetfolder)
    Call Copy(FilesListBox.SelectedItem, Finalfolder) ' copy file in a folder
    MsgBox("The file has been copied to:" & vbCrLf & Finalfolder.ToString)
    End If

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 © 2025 vBulletin Solutions, Inc. All rights reserved.