Je cherche à comparer deux fichier XML, dont un téléchargé depuis un serveur FTP. Le problème c'est que le processus est constamment en cours d'utilisation :
"System.IO.IOException : 'Le processus ne peut pas accéder au fichier 'C:\Users\<chemin>\bin\DebugVistalifeServeur.xml', car il est en cours d'utilisation par un autre processus.'"
Voici mon code :
Dim ftp As New FTP("login", "password")
ftp.DownloadFile(Application.StartupPath & "VistalifeServeur.xml", "ftp://xx.xxx.xxx.xxx/VistalifeServeur.xml")
Dim doc1 As XmlDocument = VistaLife.XmlDoc
Dim doc2 As XmlDocument = New XmlDocument
doc2.Load(Application.StartupPath & "VistalifeServeur.xml")
L'erreur survient au moment de l'ouverture du document XML téléchargé. Du coup je cherche à suspendre l'exécution du programme tant que le fichier est ouvert dans un autre processus
Une idée ?
Merci d'avance
Aucune question n'est idiote, surtout quand Google n'a pas la réponse.
A part faire une boule avec un sleep qui tourne tant que tu n'as pas accès au fichier en question (avec eventuellement un nombre d'essais max ou un timeout), je vois pas trop comment faire..
A part faire une boule avec un sleep qui tourne tant que tu n'as pas accès au fichier en question (avec eventuellement un nombre d'essais max ou un timeout), je vois pas trop comment faire..
Faire une boule, c'est à dire ?
Aucune question n'est idiote, surtout quand Google n'a pas la réponse.
La doc de cette classe "FTP" pourrait te donner la réponse sur la solution à apporter à ton problème...
Dans le Framework classique, il y a déjà FtpWebRequest (avec un exemple assez précis sur la doc Microsoft)...Cette classe "FTP" ne semble pas être un composant du framework de base donc sans plus d'information, tu n'auras pas de réponse pertinente ici (sauf si tu tombes sur une personne qui aurait utilisé exactement le même composant que toi).
Public Class FTP
'-------------------------[BroCode]--------------------------
'----------------------------FTP-----------------------------
Private _credentials As System.Net.NetworkCredential
Sub New(ByVal _FTPUser As String, ByVal _FTPPass As String)
setCredentials(_FTPUser, _FTPPass)
End Sub
Public Sub DownloadFile(ByVal _FileName As String, ByVal _ftpDownloadPath As String)
Try
Dim _request As System.Net.FtpWebRequest = System.Net.WebRequest.Create(_ftpDownloadPath)
_request.KeepAlive = False
_request.Method = System.Net.WebRequestMethods.Ftp.DownloadFile
_request.Credentials = _credentials
Dim _response As System.Net.FtpWebResponse = _request.GetResponse()
Dim responseStream As System.IO.Stream = _response.GetResponseStream()
Dim fs As New System.IO.FileStream(_FileName, System.IO.FileMode.Create)
responseStream.CopyTo(fs)
responseStream.Close()
_response.Close()
Catch ex As Exception
MessageBox.Show(ex.Message, "Download Error: ", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Public Function GetDirectory(ByVal _ftpPath As String) As List(Of String)
Dim ret As New List(Of String)
Try
Dim _request As System.Net.FtpWebRequest = System.Net.WebRequest.Create(_ftpPath)
_request.KeepAlive = False
_request.Method = System.Net.WebRequestMethods.Ftp.ListDirectory
_request.Credentials = _credentials
Dim _response As System.Net.FtpWebResponse = _request.GetResponse()
Dim responseStream As System.IO.Stream = _response.GetResponseStream()
Dim _reader As System.IO.StreamReader = New System.IO.StreamReader(responseStream)
Dim FileData As String = _reader.ReadToEnd
Dim Lines() As String = FileData.Split(New String() {Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
For Each l As String In Lines
ret.Add(l)
Next
_reader.Close()
_response.Close()
Catch ex As Exception
MessageBox.Show(ex.Message, "Directory Fetch Error: ", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
Return ret
End Function
Private Sub setCredentials(ByVal _FTPUser As String, ByVal _FTPPass As String)
_credentials = New System.Net.NetworkCredential(_FTPUser, _FTPPass)
End Sub
End Class
Aucune question n'est idiote, surtout quand Google n'a pas la réponse.
Je ne sais pas si c'est ça, mais faudrait que tu te renseignes sur l'interface IDisposable, les classes qui l'implémentent dans ton code et le mot clef Using. Parce que mal libérer les ressources peut facilement bloquer le processus
Censément, quelqu'un de sensé est censé s'exprimer sensément.
Je ne sais pas si c'est ça, mais faudrait que tu te renseignes sur l'interface IDisposable, les classes qui l'implémentent dans ton code et le mot clef Using. Parce que mal libérer les ressources peut facilement bloquer le processus
Merci à toi, j'ai finalement réussi
Aucune question n'est idiote, surtout quand Google n'a pas la réponse.
Attendre la fin d'un process
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.