IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Copie de fichiers depuis un DVD [Débutant]


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    Par défaut Copie de fichiers depuis un DVD
    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

  2. #2
    Membre Expert

    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2009
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 553
    Par défaut
    Hello,
    Effectivement, les détails de l'exception seront les bienvenus. Et surtout précise bien la ligne exacte à laquelle est est survenue, car la numérotation des lignes de ton bout de code sera différente.

  3. #3
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    Par défaut
    Je n'ai pas la ligne de l'erreur puisque je génère le programme pour me faire un ISO avec mes fichiers à copier et simuler un vrai DVD.
    Est-ce que c'est suffisant avec le détail de l'erreur ?

    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    Consultez la fin de ce message pour plus de détails sur l'appel du débogage
    juste-à-temps (JIT) à la place de cette boîte de dialogue.
     
    ************** Texte de l'exception **************
    System.UnauthorizedAccessException: L'accès au chemin d'accès 'F:\Vmware\VMware Pack Starter.7z.001' est refusé.
       à System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
       à System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
       à System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
       à System.IO.FileStream..ctor(String path, FileMode mode)
       à WindowsApplication2.Form1.CopyButton_Click(Object sender, EventArgs e)
       à System.Windows.Forms.Control.OnClick(EventArgs e)
       à System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       à System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       à System.Windows.Forms.Control.WndProc(Message& m)
       à System.Windows.Forms.ButtonBase.WndProc(Message& m)
       à System.Windows.Forms.Button.WndProc(Message& m)
       à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       à System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
     
     
    ************** Assemblys chargés **************
    mscorlib
        Version de l'assembly*: 2.0.0.0
        Version Win32*: 2.0.50727.5485 (Win7SP1GDR.050727-5400)
        CodeBase*: file:///C:/Windows/Microsoft.NET/Framework64/v2.0.50727/mscorlib.dll
    ----------------------------------------
    WindowsApplication2
        Version de l'assembly*: 1.0.0.0
        Version Win32*: 1.0.0.0
        CodeBase*: file:///F:/WindowsApplication2.exe
    ----------------------------------------
    Microsoft.VisualBasic
        Version de l'assembly*: 8.0.0.0
        Version Win32*: 8.0.50727.5483 (Win7SP1GDR.050727-5400)
        CodeBase*: file:///C:/Windows/assembly/GAC_MSIL/Microsoft.VisualBasic/8.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll
    ----------------------------------------
    System
        Version de l'assembly*: 2.0.0.0
        Version Win32*: 2.0.50727.5485 (Win7SP1GDR.050727-5400)
        CodeBase*: file:///C:/Windows/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
    ----------------------------------------
    System.Windows.Forms
        Version de l'assembly*: 2.0.0.0
        Version Win32*: 2.0.50727.5491 (Win7SP1GDR.050727-5400)
        CodeBase*: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
    ----------------------------------------
    System.Drawing
        Version de l'assembly*: 2.0.0.0
        Version Win32*: 2.0.50727.5495 (Win7SP1GDR.050727-5400)
        CodeBase*: file:///C:/Windows/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
    ----------------------------------------
    System.Configuration
        Version de l'assembly*: 2.0.0.0
        Version Win32*: 2.0.50727.5483 (Win7SP1GDR.050727-5400)
        CodeBase*: file:///C:/Windows/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
    ----------------------------------------
    System.Xml
        Version de l'assembly*: 2.0.0.0
        Version Win32*: 2.0.50727.5494 (Win7SP1GDR.050727-5400)
        CodeBase*: file:///C:/Windows/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
    ----------------------------------------
    System.Runtime.Remoting
        Version de l'assembly*: 2.0.0.0
        Version Win32*: 2.0.50727.5488 (Win7SP1GDR.050727-5400)
        CodeBase*: file:///C:/Windows/assembly/GAC_MSIL/System.Runtime.Remoting/2.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll
    ----------------------------------------
    mscorlib.resources
        Version de l'assembly*: 2.0.0.0
        Version Win32*: 2.0.50727.5485 (Win7SP1GDR.050727-5400)
        CodeBase*: file:///C:/Windows/Microsoft.NET/Framework64/v2.0.50727/mscorlib.dll
    ----------------------------------------
    System.Windows.Forms.resources
        Version de l'assembly*: 2.0.0.0
        Version Win32*: 2.0.50727.5420 (Win7SP1.050727-5400)
        CodeBase*: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_fr_b77a5c561934e089/System.Windows.Forms.resources.dll
    ----------------------------------------
     
    ************** Débogage JIT **************
    Pour activer le débogage juste-à-temps (JIT), le fichier de configuration pour cette
    application ou cet ordinateur (machine.config) doit avoir la valeur
    jitDebugging définie dans la section system.windows.forms.
    L'application doit également être compilée avec le débogage
    activé.
     
    Par exemple*:
     
    <configuration>
        <system.windows.forms jitDebugging="true" />
    </configuration>
     
    Lorsque le débogage juste-à-temps est activé, les exceptions non gérées
    seront envoyées au débogueur JIT inscrit sur l'ordinateur
    plutôt que d'être gérées par cette boîte de dialogue.

  4. #4
    Membre Expert

    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2009
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 553
    Par défaut
    Hello,
    Est-ce que tu as essayé d'exécuter ton programme avec les privilèges d'administrateur ?
    Accessoirement es-tu bien sûr de ton chemin d'accès aux fichiers que tu veux copier ?

    PS: sinon, tu aurais pu aussi utiliser la méthode File.Copy.

  5. #5
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    Par défaut
    J'ai tenté avec les droits administrateur c'est la même erreur.
    Je suis sûr du chemin d'accès oui, le chemin qui ressort dans l'erreur correspond bien au premier fichier que je veux copier.

    J'ai récupéré ce bout de code sur le net et je l'ai adapté à ma sauce, j'avais tenté avec la méthode File.Copy mais j'arrivais pas à mettre à jour la progressBar correctement pendant que la copie se faisait.

    Je peux peut-être essayer de avec ce code et le File.Copy

    Merci en tout cas de t'intéresser à mon problème ^^

  6. #6
    Membre Expert

    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2009
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 553
    Par défaut
    Ah oui, pardon, j'avais omis que tu voulais afficher une barre de progression...

    Sinon, je pense avoir trouvé d'où vient le problème, alors accroche-toi à tes bretelles:

    Pour ouvrir ton fichier (celui que tu veux copier sur ton HD), tu utilises:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    New IO.FileStream(SourcePath, IO.FileMode.Open)
    Selon la documentation (FileStream Constructor (String, FileMode)), dans ce cas de figure le framework effectue par défaut une ouverture de fichier en mode lecture/écriture.

    Or, ton fichier se trouvant sur un DVD, il n'est pas possible d'ouvrir le fichier dans ce mode. Il faut l'ouvrir en lecture seule. Donc, essaye le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    New IO.FileStream(SourcePath, IO.FileMode.Open, FileAccess.Read)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WS 2008 R2] Copie de fichiers depuis un WS2003
    Par Ludo75 dans le forum Windows Serveur
    Réponses: 4
    Dernier message: 15/02/2011, 19h36
  2. copie de fichiers depuis une hierarchie de dossiers
    Par marsupcs dans le forum Administration système
    Réponses: 2
    Dernier message: 22/10/2009, 23h05
  3. copie de fichiers depuis le web
    Par krhyme dans le forum ASP
    Réponses: 1
    Dernier message: 05/06/2008, 22h36
  4. copie de fichiers depuis le web
    Par krhyme dans le forum Autres langages pour le Web
    Réponses: 0
    Dernier message: 05/06/2008, 11h02
  5. copie de fichier depuis internet vers pc
    Par krhyme dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 04/06/2008, 18h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo