File.Delete avec une image
Bonjour,
Dans mon application je telecharge un fichier zip que je decompresse dans un repertoire temporaire. Je verifie qu'il ya un fichier excel dedans puis je dois supprimer ce repertoire temporaire. (bon le prog fera plus de truc par la suite mais pour l'instant je me contente de ca ;) )
Le probleme c'est que des que j'ai une image dans le zip je ne peux plus faire de delete.
J'ai essaye:
Code:
Directory.Delete(nomdurep,true);
Et j'obtiens l'erreur:
Citation:
Le processus ne peut pas accéder au fichier 'CA13249.jpg', car il est en cours d'utilisation par un autre processus.
Du coup, j'ai essaye de supprimer tous les fichiers contenu dans le rep avant de le supprimer:
Code:
1 2 3 4 5 6 7
|
files = Directory.GetFileSystemEntries(monrep);
int filecount2 = files.GetUpperBound(0) + 1;
for (int i = 0; i < filecount2; i++)
{
File.Delete(files[i]);
} |
Et j'obtiens l'erreur:
Citation:
Le processus ne peut pas accéder au fichier 'CA13249.jpg', car il est en cours d'utilisation par un autre processus.
Et ca a chaque fois pour la derniere image.
Du coup je vois pas comment resoudre mon bug. :s
Peut etre que ca vient du code de decompression que j'ai honteusement pompe???
Code:
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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
public static void Decompresser(string cheminFichier)
{
string zip_file = cheminFichier;
string rep = Path.GetDirectoryName(cheminFichier) + "\\" + Path.GetFileNameWithoutExtension(cheminFichier);
ZipInputStream zip = null;
ZipEntry zip_entry;
FileStream stream = null;
int nb;
int nbm=0;
try
{
nbm = 0;
//un stream zip pour l'entrée zip
zip = new ZipInputStream(new FileStream(zip_file, FileMode.Open, FileAccess.Read));
//on crée le répertoire pour les fichier décompresser
Directory.CreateDirectory(rep);
//tant que il y a une entrée on continue,sinon on arrête
while ((zip_entry = zip.GetNextEntry()) != null)
{
try
{
//si entrée zip_entry est un répértoire on crée le repertoire
if (zip_entry.IsDirectory)
{
Directory.CreateDirectory(rep + "\\" + zip_entry.Name);
}
//sinon :
else
{
//on crée un stream pour l'écriture
stream = new FileStream(rep + "\\" + zip_entry.Name, FileMode.Create, FileAccess.Write);
//le conteur
int count;
byte[] mem = new byte[10000];
//l'écriture
while ((count = zip.Read(mem, 0, 10000)) > 0)
{
stream.Write(mem, 0, count);
}
}
nbm++;
}
catch (Exception q)
{
continue;
}
}
}
catch (Exception e)
{
}
finally
{
if (stream != null) stream.Close();
if (zip != null) zip.Close();
}
if (stream != null) stream.Close();
if (zip != null) zip.Close();
zip_entry = null;
zip_file = null;
} |
dans ce code l'auteur ferme bien ses streams et pour etre sur j'ai remis ces varialbes a null. Donc bref je vois pas comment resoudre mon probleme... SI quelqu'un a une idee?
merci