Que signifie erreur produite dans mscorlib.dll

Résolu
nono78220 Messages postés 181 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 28 octobre 2010 - 1 févr. 2008 à 22:27
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 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 ?

Voici le code :

Imports System.io
Imports System.IO.File
Imports System.IO.StreamWriter

Public Sub EnregistrerRV()

        ' ##### 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

    End Sub
A voir également:

7 réponses

cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
2 févr. 2008 à 11:02
 Bonjour,

Pour info, le "Select Case mois ... End Select" peut être remplacé par cette petite fonction (à adapter pour .Net):

mois = 2

MsgBox UCase(MoisEnMajusculesEtSansAccent(LCase(MonthName(mois))))

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

jean-marc
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nono78220 Messages postés 181 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 28 octobre 2010
3 févr. 2008 à 15:09
Hello,

En insérant DoEvents, malheureusement tjrs le même bug ...

Jack tu me dis "Les 12 répertoires mensuels existent-ils bien ? et avec la même orthographe".

En fait, le dossier et le fichier se crée correctement mais l'erreur se ficalise tjrs sur ce StreamWriter ...
Bon, je vais chercher.
0
nono78220 Messages postés 181 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 28 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

Merci pour tes conseils
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
4 févr. 2008 à 17:08
Cool
0
Rejoignez-nous