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
Partager