IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

fichier qui ne se supprime pas car utilisé par un processus


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 58
    Points
    58
    Par défaut fichier qui ne se supprime pas car utilisé par un processus
    Bonjour,

    J'ai un pdf qui s'affiche dans un webbrowser . Pour cela je crée un fichier temporaire sur disque puis je le supprime sur formclosed.
    Mon probleme c'est que ce fichier ne veut pas se supprimer car il y a un message me disant qu'il est déja utilisé par un processus.

    Voila mon code pour la creation du fichier temporaire et l'affichage dans le webbrowser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                document = aObjet;            
                string nom = document.Emplacement;
                byte[] t = document.Document;
                File.WriteAllBytes("C:\\" + nom, t);
                string dest = "C:\\" + nom;
                webBrowser1.Navigate(@dest);
    Et le code pour la suppression du fichier temporaire sur form_closed :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        private void FRM_Visualisation_Document_FormClosed(object sender, FormClosedEventArgs e)
            {
     
                Process[] Les_Proc = Process.GetProcesses();//Collection des processus actuellement lancés
                foreach (Process Processus in Les_Proc)
                    if ("AcroRd32" == Processus.ProcessName)
                    {
                        Processus.Kill();
                        Processus.Close();
                    }                     
               File.Delete("C:\\"+nom);
            }
    J'ai regardé dans les anciens posts j'y ai trouvé des trucs intéressants mais là maintenant je suis bloquée.

    Merci d'avance!

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 58
    Points
    58
    Par défaut
    quelqu'un aurait-il une idée?

  3. #3
    Membre éclairé
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Points : 777
    Points
    777
    Par défaut
    tu fait juste pas fermer ton stream.

    Aussi, n'écrit jamais sur le C:\, il y a une place expres pour l'écriture de fichier dans windows qui sapel isolatedStorage. Sinon avec vista, ton code doit runner admin ce qui est tres tres mauvais comme design.


    Voici une meilleur methode.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    	public partial class Form1 : Form
    	{
    		public Form1()
    		{
    			InitializeComponent();
    		}
     
    		private const string FILENAME = "MyFile.txt";
     
    		private bool FileExists()
    		{
    			IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForDomain();
     
    			return !string.IsNullOrEmpty(Array.Find<string>(file.GetFileNames(FILENAME), new Predicate<string>(delegate(string filename)
    			{
    				return filename == FILENAME;
    			})));
    		}
     
    		private void DeleteFile()
    		{
    			if (FileExists())
    			{
    				IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForDomain();
    				file.DeleteFile(FILENAME);
    			}
    		}
     
    		private void button1_Click(object sender, EventArgs e)
    		{
    			using (IsolatedStorageFileStream persistStream = new IsolatedStorageFileStream(FILENAME, FileMode.CreateNew))
    			{
    				using (StreamWriter writer = new StreamWriter(persistStream))
    				{
    					writer.WriteLine("blablabla");
     
    					writer.Flush();
    					persistStream.Flush();
     
    				}
    			}
     
    			if (FileExists())
    			{
    				IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForDomain();
     
    				IsolatedStorageFileStream oStream = new IsolatedStorageFileStream(FILENAME, FileMode.Open, file);
     
    				String filePath = oStream.GetType().GetField("m_FullPath", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(oStream).ToString();
    				webBrowser1.Navigate(filePath);
    			}
    		}
     
    		private void Form1_FormClosed(object sender, FormClosedEventArgs e)
    		{
    			DeleteFile();
    		}
    	}
    Remoting Context Matters
    Everything in this chapter is 100 percent undocumented. Reliance on these techniques is not supported by either Microsoft, the publisher, or the author of this book. Use at you own risk! If your computer won't work afterwards, your toaster blows up or your car doesn't start, I assume no liability whatsoever: You're now about to enter the uncharted territories of .NET and you do so on your own risk. I can only provide some guidance

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 58
    Points
    58
    Par défaut
    En fait je voudrais ouvrir mon fichier stocké dans sql server en varbinary. Donc pour cela j'ai essayé la méthode que vous m'avez indiqué seulement moi dans writer.WriteLine j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Encoding.Default.GetString(t)
    puisque je récupère mon fichier stocké dans sql server dans un tableau de bytes en C# et donc je le convertis en string de cette maniere là.
    Mais le probleme c'est que ca me cree bien le fichier mais quand je l'ouvre il est vide il n'y a rien d'écrit dedans.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 58
    Points
    58
    Par défaut
    un pti up

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 112
    Points : 58
    Points
    58
    Par défaut
    C'est bon j'ai résolu mon probleme
    En fait pour convertir mon tableau de bytes en string il fallait utiliser la sérialisation tout en utilisant IsolatedStorage
    Je mets mon code ca peut servir à qqn!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    using (IsolatedStorageFileStream persistStream = new IsolatedStorageFileStream(FILENAME, FileMode.CreateNew))
                {
                    //Serialise le tableau de bytes pour pouvoir l'ecrire dans le fichier FILENAME 
                    BinaryFormatter formatter = new BinaryFormatter();
                    try
                    {
                        formatter.Serialize(persistStream, t);
                    }
                    catch (SerializationException e)
                    {
                        throw;
                    }
                    finally
                    {
                        persistStream.Close();
                    }
     
                }
    où t est mon tableau de bytes

    Merci pour tout quand meme

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 14/04/2007, 18h47
  2. Réponses: 2
    Dernier message: 13/03/2007, 09h21
  3. [Cookies] Cookie qui ne se supprime pas
    Par navis84 dans le forum Langage
    Réponses: 3
    Dernier message: 06/07/2006, 15h01
  4. Fichiers qui ne s'effacent pas
    Par Blo0d4x3 dans le forum Administration système
    Réponses: 8
    Dernier message: 21/03/2006, 13h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo