Que signifie erreur produite dans mscorlib.dll [Résolu]

nono78220 182 Messages postés dimanche 3 décembre 2006Date d'inscription 28 octobre 2010 Dernière intervention - 1 févr. 2008 à 22:27 - Dernière réponse : cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention
- 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
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
cs_JMO 1855 Messages postés jeudi 23 mai 2002Date d'inscription 24 juin 2018 Dernière intervention - 2 févr. 2008 à 11:02
3
Merci
 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

Merci cs_JMO 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 76 internautes ce mois-ci

Commenter la réponse de cs_JMO
Meilleure réponse
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 3 févr. 2008 à 20:23
3
Merci
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)

Merci cs_Jack 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 76 internautes ce mois-ci

Commenter la réponse de cs_Jack
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 2 févr. 2008 à 01:28
0
Merci
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)
Commenter la réponse de cs_Jack
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 2 févr. 2008 à 01:29
0
Merci
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
Commenter la réponse de cs_Jack
nono78220 182 Messages postés dimanche 3 décembre 2006Date d'inscription 28 octobre 2010 Dernière intervention - 3 févr. 2008 à 15:09
0
Merci
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.
Commenter la réponse de nono78220
nono78220 182 Messages postés dimanche 3 décembre 2006Date d'inscription 28 octobre 2010 Dernière intervention - 4 févr. 2008 à 01:18
0
Merci
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
Commenter la réponse de nono78220
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 4 févr. 2008 à 17:08
0
Merci
Cool
Commenter la réponse de cs_Jack

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.