nono78220
Messages postés181Date d'inscriptiondimanche 3 décembre 2006StatutMembreDernière intervention28 octobre 2010
-
1 févr. 2008 à 22:27
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
4 févr. 2008 à 17:08
Bonjour,
Sur une form, j'ai un DateTimePicker (DTP) et une listview. Dans ma listview s'affiche des RV à la date que je sélectionne par le DTP.
J'utilise la class StreamWriter pour enregistrer ma listviex dans un fichier text --> pas de pbl lorsque c'est la date du jour (exemple : vendredi 1 février)
Par contre lorsque je sélectionne une autre date, un message d'erreur apparait :
Une exception non gérée du type 'System.IO.IOException' s'est produite dans mscorlib.dll Informations supplémentaires : Le processus ne peut pas accéder au fichier "C:\RV année 2008\FEVRIER\RV du vendredi 15 février 2008.txt",
car il est en cours d'utilisation par un autre processus.
le focus de l'erreur se situe sur Dim SW As New StreamWriter(ola) ;
Que signifie cette erreur ?
' ##### ENREGISTRER LES ELEMENT DANS UN FICHIER #####
Dim dat As Date
Dim annee As String 'Année de prise des RV
Dim mois As String ' mois de prise des RV
dat = dtpDate.Value
mois = Month(dat) 'en chiffre ex: 2 si c'est février
annee = Year(dat)
Select Case mois
Case "1"
mois = "JANVIER"
Case "2"
mois = "FEVRIER"
Case "3"
mois = "MARS"
Case "4"
mois = "AVRIL"
Case "5"
mois = "MAI"
Case "6"
mois = "JUIN"
Case "7"
mois = "JUILLET"
Case "8"
mois = "AOUT"
Case "9"
mois = "SEPTEMBRE"
Case "10"
mois = "OCTOBRE"
Case "11"
mois = "NOVEMBRE"
Case "12"
mois = "DECEMBRE"
End Select
'''''''''''CREATION DES DOSSIERS DE STOCKAGE
''''''''''''''''''''''''''''''''''''''''''''''''''''''
chemin = "C:" & "RV année " & annee & "" & mois
If Not Directory.Exists(chemin) Then
Directory.CreateDirectory(chemin)
End If
'''''''NOM D'ENREGISTREMENT DES RV DU JOUR
ola = "C:" & "RV année " & annee & "" & mois & "\RV du " & dtpDate.Text & ".txt"
'''''''CREATION DU FICHIER TEXT
If Not File.Exists(ola) Then
File.Create(ola)
End If
Dim SW As New StreamWriter(ola) ' Ouvre le fichier
'On déclare les autres variables
Dim Save_Listview As String = ""
Dim i As Integer
Dim j As Integer
For i = 0 To lsvRV.Items.Count - 1 ' Boucle sur le nombre d'items dans la ListView
For j = 0 To lsvRV.Columns.Count - 1 ' Boucle sur le nombre de colonnes dans la ListView
' MsgBox(lsvRV.Items(i).SubItems(j).Text)
If lsvRV.Items(i).SubItems(j).Text = "" Then
lsvRV.Items(i).SubItems(j).Text = " "
End If
Save_Listview = Save_Listview & lsvRV.Items(i).SubItems(j).Text & "|" ' Sauvegarde d'un item dans la ListView
Next j
SW.WriteLine(Save_Listview) ' Ecrit dans le fichier le contenu de la variable Save_Listview
Save_Listview = "" ' Remplacement du contenu de Save_Listview par une chaîne vide
Next i
SW.Close() ' Fermeture du fichier
Public Function MoisEnMajusculesEtSansAccent(ByVal MonMois)
Dim Liste
Dim CompteurListe
Dim CaractereRecherche
Dim CaractereRemplacement
If Len(MonMois) > 0 Then
Liste = Split("é;e#û;u#;","#")
For CompteurListe = LBound(Liste) To UBound(Liste)
CaractereRecherche = Split(Liste(CompteurListe), ";")(0)
CaractereRemplacement = Split(Liste(CompteurListe), ";")(1)
MonMois = Replace(MonMois, CaractereRecherche, CaractereRemplacement)
Next
MoisEnMajusculesEtSansAccent = MonMois
End If
End Function
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 3 févr. 2008 à 20:23
Re
C'est pour ça que je te suggère de vérifier que File.Create crée aussi l'arborescence.
Que vaut la chaine ola au moment du bug ?
Il est possible que tu utilises des caractères interdits comme nom de fichier ...
Le répertoire et le fichier pointé dans ce cas existe t-il ?
Si le fichier existe bien, au moment du bug ET avant de fermer ton application pour cause de bug, essaye de supprimer le fichier à la main avec le gestionnaire de fichier : Si Windows s'y oppose, c'est que le fichier est utilisé par un autre process et sa réouverture en mode écriture n'est peut-être pas possible ...
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 2 févr. 2008 à 01:28
Salut
Je connais pas trop le VB.Net mais je pense à autre chose :
Les 12 répertoires mensuels existent-ils bien ? et avec la même orthographe
Essaye de mettre un DoEvents (ou équivalent en .Net) entre le "File.Create" et le Dim afin de laisser le temps au système d'accéder au disque.
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 2 févr. 2008 à 01:29
Voir aussi le relentissement d'accès dû aux anti-virus qui saute sur tous les nouveaux fichiers et les rendraient innaccessibles immédiatement après leur création : DoEvents, ça doit marcher
Vous n’avez pas trouvé la réponse que vous recherchez ?
nono78220
Messages postés181Date d'inscriptiondimanche 3 décembre 2006StatutMembreDernière intervention28 octobre 2010 4 févr. 2008 à 01:18
Hello,
Les répertoires étaient créés et effectivement lorsque j'essayais de supprimer le fichier, cela était mpossible
En fait, file.create créait le fichier et l'ouvrait.
Donc stream.writer ne pouvait l'ouvrir car il était déjà ouvert
J'ai donc supprimer
'''''''CREATION DU FICHIER TEXT
If Not File.Exists(ola) Then
File.Create(ola)
End If
Je me suis aperçu finalement que stream.writer crée et ouvre le fichier