none
Impossible de trouver une partie du chemin d'accès RRS feed

  • Discussion générale

  • Je travail avec un backgroundWorker qui fait le backup de mes fichiers. Je commence par récuperrer mes paramettres avec ma classe bgwArgument puis je remplis un liste de tout les répertoires et sousrépertoir que je reproduis intégralement. Une foi les répertoires créer, je copie les fichiers et c'est la que sa bug. Je recois l'erreur suivante "Impossible de trouver une partie du chemin d'accès" pour chaue fichier que je tante de copier. Voici ma methode .doWork

    Private

     

    Sub bgwCompte_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgwCompte.DoWork

     

    Dim slist As New List(Of String)

     

    Dim destination As String = CType(e.Argument, bgwArguments).destination

     

    Dim dlist As New List(Of String)

     

    Dim prog As Long = 0

     

    Dim siz As Long = 0

     

    Dim llist As New List(Of String)

     

    Dim user As String = System.Environment.UserName

     

    Dim erreur As New List(Of String)

     

    '--->> Je rcupre les rpertoires sauvegarder

     

    If CType(e.Argument, bgwArguments).cbdes Then

    llist.Add(GetFolderPath(Environment.SpecialFolder.DesktopDirectory))

    slist.Add(GetFolderPath(Environment.SpecialFolder.DesktopDirectory))

     

    End If

     

    If CType(e.Argument, bgwArguments).cbdoc Then

    llist.Add(GetFolderPath(Environment.SpecialFolder.MyDocuments))

    slist.Add(GetFolderPath(Environment.SpecialFolder.MyDocuments))

     

    End If

     

    If CType(e.Argument, bgwArguments).cbfav Then

    llist.Add(GetFolderPath(Environment.SpecialFolder.Favorites))

    slist.Add(GetFolderPath(Environment.SpecialFolder.Favorites))

     

    End If

     

    If CType(e.Argument, bgwArguments).cbmus Then

    llist.Add(GetFolderPath(Environment.SpecialFolder.MyMusic))

    slist.Add(GetFolderPath(Environment.SpecialFolder.MyMusic))

     

    End If

     

    If CType(e.Argument, bgwArguments).cbpic Then

    llist.Add(GetFolderPath(Environment.SpecialFolder.MyPictures))

    slist.Add(GetFolderPath(Environment.SpecialFolder.MyPictures))

     

    End If

     

    '--->> Remplie la liste de sousdossier

     

    For Each d In llist

     

    For Each s In Directory.GetDirectories(d, "*", SearchOption.AllDirectories)

     

    If (File.GetAttributes(s) And FileAttributes.ReparsePoint) = FileAttributes.ReparsePoint Then

    dlist.Add(s)

     

    Else

    slist.Add(s)

     

    End If

     

    Next

     

    Next

     

    '--->> Je vrifie une deuxime fois pour tre sure qu'aucun fichier reparse est dans la liste

     

    For Each d In dlist

    slist.Remove(d)

     

    Next

     

    '--->> Inicialise mon progressbar

     

    For Each d In slist

     

    For Each f In Directory.GetFiles(d, "*.*", SearchOption.AllDirectories)

    siz += f.Length()

     

    Next

     

    Next

     

    '--->> Cration des rpertoires

     

    For Each dire In slist

     

    Dim d As String = fileDestination

     

    Dim nom As String

     

    Dim index As Integer

    index = dire.IndexOf(user) + user.Length

    nom = dire.Substring(index)

    d = d + nom

    System.IO.Directory.CreateDirectory(d)

     

    Next

     

    '--->> copie des fichiers

     

    For Each dire In slist

     

    If Directory.GetFiles(dire).Count > 0 Then

     

    For Each f In System.IO.Directory.GetFiles(dire)

    prog += f.Length

     

    If f.Substring(f.LastIndexOf(".") + 1) = "lnk" Then

     

    Else

     

    Dim snom As String

     

    Dim ssnom As String

     

    Dim sindex As Integer

     

    Dim fileDestinationSub As String

     

    Dim backup As String

    sindex = f.LastIndexOf(

    "\") + 1

    snom = f.Substring(sindex)

    ssnom = f.Substring(f.IndexOf(user))

    fileDestinationSub = destination +

    "\" + ssnom

    backup = fileDestinationSub.Substring(0, fileDestinationSub.LastIndexOf(

    "\")) + "zz" + snom

     

    If File.Exists(fileDestinationSub) Then

     

    Dim tsource As Date = File.GetLastWriteTime(f)

     

    Dim tdestin As Date = File.GetLastWriteTime(fileDestinationSub)

     

    If tsource > tdestin Then

    File.Replace(f, fileDestinationSub, backup)

    bgwCompte.ReportProgress((prog * 100) / siz,

    New bgwProgress("Le transfre est " & prog.ToString & " de " & siz.ToString))

     

    End If

     

    Else

     

    Try

    File.Copy(f, fileDestinationSub,

    True) '<<------------ Sa bug ici----------------

     

    Catch ex As Exception

    erreur.Add(ex.Message)

     

    End Try

    bgwCompte.ReportProgress((prog * 100) / siz,

    New bgwProgress("Le transfre est " & prog.ToString & " de " & siz.ToString))

     

    End If

     

    End If

     

    Next

     

    End If

     

    Next

     

    End Sub

    mardi 3 août 2010 18:16

Toutes les réponses

  • Bonjour,

    Afin que nous puissions reproduire votre problème, pouvez nous indiquer le code de la classe/structure bgwArguments et les différentes valeurs spécifiées dans les propriétés ?

    Aussi, est-il possible que vous puissiez indenter correctement votre code ?

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    mardi 3 août 2010 20:15
    Modérateur
  • Désollé pour la disposition du code, quand j'ai copié et collé sa scrapé la mise en forme. Voici bgwArguments:

    Public Class bgwArguments
      Private _cbfav As Boolean = False
      Private _cbpic As Boolean = False
      Private _cbmus As Boolean = False
      Private _cbdes As Boolean = False
      Private _cbdoc As Boolean = False
      Private _destination As String = ""
      Private _source As String = ""
    
      Public Sub New()
        _cbfav = False
        _cbpic = False
        _cbmus = False
        _cbdes = False
        _cbdoc = False
      End Sub
      Public Sub New(ByVal des As String)
        _destination = des
    
      End Sub
    
      Public Property cbfav() As Boolean
        Get
          Return _cbfav
        End Get
        Set(ByVal value As Boolean)
          _cbfav = value
        End Set
      End Property
      Public Property cbdoc() As Boolean
        Get
          Return _cbdoc
        End Get
        Set(ByVal value As Boolean)
          _cbdoc = value
        End Set
      End Property
      Public Property cbmus() As Boolean
        Get
          Return _cbmus
        End Get
        Set(ByVal value As Boolean)
          _cbmus = value
        End Set
      End Property
      Public Property cbpic() As Boolean
        Get
          Return _cbpic
        End Get
        Set(ByVal value As Boolean)
          _cbpic = value
        End Set
      End Property
      Public Property cbdes() As Boolean
        Get
          Return _cbdes
        End Get
        Set(ByVal value As Boolean)
          _cbdes = value
        End Set
      End Property
    
      Public Property source() As String
        Get
          Return _source
        End Get
        Set(ByVal value As String)
          _source = value
        End Set
      End Property
    
      Public Property destination() As String
        Get
          Return _destination
        End Get
        Set(ByVal value As String)
          _destination = value
        End Set
      End Property
    
    
    End Class
    

     

    mardi 3 août 2010 20:20
  • Bonjour,

    Et l'instanciation de la classe avec ses propriétés alimentée ?

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    mardi 3 août 2010 20:22
    Modérateur
  • Voila tout les principales classe qui instancie mon doWork il manque certaine autre classe pour le progressbar et des truc comme sa mais je doute que tu en as besoin:

    Imports System.IO
    Imports System.Environment
    Imports System.ComponentModel
    Imports System.Threading
    
    Public Class autoBackup
      Private WithEvents bgwCompte As BackgroundWorker
      Private Delegate Function dIncrement(ByVal nbr As Integer) As Integer
      Private Event bgwTermine(ByVal nbr As Integer)
    
      Dim si As Long
      Dim progress As Long
      Dim fileDestination As String
      Dim user As String
      Dim xmldoc As New Xml.XmlDocument
      Dim xmlpath As String
      Dim BGArg As bgwArguments = New bgwArguments
    
    
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        '------------------------------------------ Initialisation --------------------------------------------
        Button1.Visible = False
        Button2.Enabled = False
        Button2.Text = "Terminé"
        si = 0
        progress = 0
    
    
        '----------------------------------------- Copie de données -------------------------------------------
        If cbdoc.Checked Then
          For Each n In xmldoc.GetElementsByTagName("doc")
            n.innertext() = "T"
          Next
          BGArg.cbdoc = True
        Else
          For Each n In xmldoc.GetElementsByTagName("doc")
            n.innertext() = "F"
          Next
        End If
    
        If cbmus.Checked Then
          For Each n In xmldoc.GetElementsByTagName("mus")
            n.innertext() = "T"
          Next
          BGArg.cbmus = True
        Else
          For Each n In xmldoc.GetElementsByTagName("mus")
            n.innertext() = "F"
          Next
        End If
    
        If cbpic.Checked Then
          For Each n In xmldoc.GetElementsByTagName("pic")
            n.innertext() = "T"
          Next
          BGArg.cbpic = True
        Else
          For Each n In xmldoc.GetElementsByTagName("pic")
            n.innertext() = "F"
          Next
        End If
    
        If cbdesk.Checked Then
          For Each n In xmldoc.GetElementsByTagName("des")
            n.innertext() = "T"
          Next
          BGArg.cbdes = True
        Else
          For Each n In xmldoc.GetElementsByTagName("des")
            n.innertext() = "F"
          Next
        End If
    
        If cbfav.Checked Then
          For Each n In xmldoc.GetElementsByTagName("fav")
            n.innertext() = "T"
          Next
    
          BGArg.cbfav = True
        Else
          For Each n In xmldoc.GetElementsByTagName("fav")
            n.innertext() = "F"
          Next
        End If
    
        Me.startBgwCompte(BGArg)
    
        '--------------------------------------------- Terminé ------------------------------------------------
    
        xmldoc.Save(xmlpath)
      End Sub
      Private Sub startBgwCompte(ByVal source As bgwArguments)
    
        ' On remet la ProgressBarre à zéro
        With Me.ProgressBar1
          .Minimum = 0
          .Maximum = 100
          .Value = 0
        End With
    
        bgwCompte = New BackgroundWorker
    
        ' le BackGroundWorker doit indiquer sa progression et accepter une possible annulation
        bgwCompte.WorkerReportsProgress = True
        bgwCompte.WorkerSupportsCancellation = True
    
        ' on utilise l'objet bgwArgument pour passer des paramètres au Thread 
    
        bgwCompte.RunWorkerAsync(source)
      End Sub
      Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        user = System.Environment.UserName
        Dim test As String = System.Reflection.Assembly.GetExecutingAssembly.Location()
        Dim t As Array = Directory.GetFiles(test.Substring(0, test.LastIndexOf("\")), "DefaultParameters.xml", SearchOption.AllDirectories)
    
        'For Each w In t
        '  xmlpath = w
        'Next
        xmlpath = "C:\Users\Gary\Documents\Visual Studio 2008\Projects\WindowsApplication3\WindowsApplication3\DefaultParameters.xml"
        xmldoc.Load(xmlpath)
    
        For Each n In xmldoc.GetElementsByTagName("defaultLocation")
          fileDestination = n.innertext
        Next
    
        lbdestination.Text = fileDestination
    
        If Directory.Exists(fileDestination) Then
        Else
          lberror.Text = "Le répertoir choisit n'existe pas."
          lberror.Visible = True
        End If
        BGArg.destination = fileDestination
        initCheck()
        validRep()
      End Sub
    
    mardi 3 août 2010 20:26
  • Bonjour,

     

    Avez-vous essayé de vérifier en mode debug quel est la valeur du chemin que l’application ne trouve pas ?

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF

    Café des usages

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

    mercredi 4 août 2010 09:59
  • Oui j'ai vérifier et le chemain est correct. Sinon, est-ce possible de joindre un fichier zip et vous faire parvenir le dossier complet de mon projet? Ca serait plus simple que d'avoir plein de petit bout de code pour vous de le tester.
    mardi 10 août 2010 14:15
  • Bonjour,

    Pouvez-vous m'envoyer votre projet dans une archive zip sur gilles.tourreau@pos.fr. Merci de mettre l'URL de cette conversation dans l'e-mail.

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    mardi 10 août 2010 20:31
    Modérateur
  • Bonjour,

     

    Avez-vous avancé avec ce projet à l’aide de M. Tourreau ?

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF

    Café des usages

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

    lundi 16 août 2010 09:11
  • pour le moment j'attend toujour une réponse...
    jeudi 19 août 2010 02:57
  • Bonjour,

    Sauf erreur de ma part, j'ai bien reçu votre projet et je vous ai répondu (par e-mail) afin que vous puissiez m'expliquer le protocole de reproduction de votre problème...

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    jeudi 19 août 2010 08:06
    Modérateur
  • C'est exacte. Par la suite je vous ai réppondu par e-mail afin de savoir ce qu'était un protocole de reproduction car le terme me dit rien. Mais vu votre réponse sur ce forum, je prend conscience que le e-mail doit fonctionner que dans un sense uniquement. C'est mon erreur.
    vendredi 20 août 2010 13:26
  • Pour le protocole de reproduction, il suffit de mettre un point d'arret a la ligne 334 de autobackup.vb la ou j'ai mis en commentaire "sa bug ici". Il y a un try catch a cette endroit qui empeche le programme de planté mais la ligne 334 ne fonctionne pas. Si tu enlève le try tu va recevoir le message d'erreur.
    vendredi 20 août 2010 14:03
  • Bonjour,

    Que dois-je cocher dans "dossier à sauvegarder" ? Que dois-je spécifier comme chemin dans "Destination du backup" ?

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    dimanche 22 août 2010 11:20
    Modérateur
  • Tu peux cocher celui de ton choix, sa plante avec tout les choix et la destination aussi est de ton choix, le programe devrait créé ses dossiers par lui-même.

    lundi 23 août 2010 13:11
  • Bonjour,

    Pouvez-vous m'envoyer le fichier defaultParameters.xml sur gilles.tourreau@pos.fr ?

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    mardi 24 août 2010 09:52
    Modérateur