Bonjour à tous,

J'ai un projet un peu particulier, je vais tenter d'être le plus clair possible et vous donner le maximum de détails.
En fait je fournis à des utilisateurs des fichiers zippés avec 7z gravés sur un DVD avec mon programme en VB.NET. L'intégralité des fichiers ne tient pas sur un seul DVD, il y en aura au moins deux.
Au lancement du programme il y a un bouton Parcourir pour que l'utilisateur puisse choisir l'emplacement où il veut copier les fichiers sur son poste.
Cet emplacement est conservé dans une constante pour être réutilisée et il est affiché dans un label.
Un bouton "Lancer la copie" se dégrise alors. J'ai stocké les noms des fichiers à copier dans un tableau dans mon programme et au lancement de la copie, le programme parcours le tableau pour regarder si le fichier existe et le copier si c'est le cas.
J'ai 2 progressBar qui se mettent à jour, la première pour la copie du fichier en cours et la seconde pour afficher le nombre de fichiers copiés sur le nombre de fichiers à copier au total.

Tout ça fonctionne correctement si je fais le test en local sur mon poste, c'est à dire que les fichiers source et les fichiers destination sont sur ma machine.
Par contre si les fichiers source sont sur un DVD (le chemin source change donc dans mon programme), je rencontre l'erreur :"L'accès au chemin d'accès 'F:\Vmware\VMware Pack Starter.7z.001' est refusé'
F correspond au lecteur DVD
si vous avez besoin de plus de détails sur l'erreur j'ai tout le détail de l'exception.

Voici mon code actuel (je le rappelle qui marche si la source est en local sur mon poste)
Pouvez-vous me donner un coup de main ? Est-ce qu'il y a quelque chose à ajouter pour la sécurité ou autre ? je bloque un peu là
Je ne suis pas développeur, merci de votre clémence il y a sûrement des choses qui feront sauter les développeurs au plafond ^^

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
Imports System.IO
Public Class Form1
 
    Dim MonTableau(21) As String
    Dim Source As String = ".\Vmware\"
    Dim dest As String
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        CopyButton.Enabled = False
    End Sub
 
    Private Sub Browse_Click(sender As Object, e As EventArgs) Handles Browse.Click
        Dim FBD As New FolderBrowserDialog
        FBD.Description = "Select destination folder"
        If Not FBD.ShowDialog = DialogResult.OK Then Return
        Label2.Text = FBD.SelectedPath
        CopyButton.Enabled = True
    End Sub
 
    Public Function CompterFichiers(ByRef vsFolder As String, ByRef vsPattern As String) As Integer
        Return My.Computer.FileSystem.GetFiles(vsFolder, FileIO.SearchOption.SearchTopLevelOnly, vsPattern).Count
    End Function
 
    Private Sub CopyButton_Click(sender As Object, e As EventArgs) Handles CopyButton.Click
        MonTableau(0) = "VMware Pack Starter.7z.001"
        MonTableau(1) = "VMware Pack Starter.7z.002"
        MonTableau(2) = "VMware Pack Starter.7z.003"
        MonTableau(3) = "VMware Pack Starter.7z.004"
        MonTableau(4) = "VMware Pack Starter.7z.005"
        MonTableau(5) = "VMware Pack Starter.7z.006"
        MonTableau(6) = "VMware Pack Starter.7z.007"
        MonTableau(7) = "VMware Pack Starter.7z.008"
        MonTableau(8) = "VMware Pack Starter.7z.009"
        MonTableau(9) = "VMware Pack Starter.7z.010"
        MonTableau(10) = "VMware Pack Starter.7z.011"
        MonTableau(11) = "VMware Pack Starter.7z.012"
        MonTableau(12) = "VMware Pack Starter.7z.013"
        MonTableau(13) = "VMware Pack Starter.7z.014"
        MonTableau(14) = "VMware Pack Starter.7z.015"
        MonTableau(15) = "VMware Pack Starter.7z.016"
        MonTableau(16) = "VMware Pack Starter.7z.017"
        MonTableau(17) = "VMware Pack Starter.7z.018"
        MonTableau(18) = "VMware Pack Starter.7z.019"
        MonTableau(19) = "VMware Pack Starter.7z.020"
        MonTableau(20) = "VMware Pack Starter.exe"
 
        dest = Label2.Text & "\"
        Dim a As Integer = 0
        Dim b = 1
 
        For a = 0 To 21
            Dim SourcePath = Source & MonTableau(a)
            Dim DestinationPath = dest & MonTableau(a)
            If File.Exists(SourcePath) Then
                Label4.Text = "Nombre de fichiers copiés : " & b & " / " & CompterFichiers(Source, "*.*")
                Dim sr As New IO.FileStream(SourcePath, IO.FileMode.Open) 'source file
                Dim sw As New IO.FileStream(DestinationPath, IO.FileMode.Create) 'target file, defaults overwrite
                Dim len As Long = sr.Length - 1
 
                For i As Long = 0 To len
                    sw.WriteByte(sr.ReadByte)
                    If i Mod 1000 = 0 Then 'only update UI every 1 Kb copied
                        ProgressBar.Value = i * 100 / len
                        Label3.Text = "Copie en cours : " & ProgressBar.Value & "%"
                        Application.DoEvents()
                    End If
                Next
                sr.Close()
                sw.Close()
                ProgressBar1.Value = b / CompterFichiers(Source, "*.*") * 100
                b += 1
            End If
        Next
        MsgBox("Terminé !", "Copie terminée !")
        Me.Close()
    End Sub
End Class