Je ne peux pas l'air d'être en mesure de supprimer des fichiers après une utilisation StreamReader, avec unC# ne peut pas supprimer le fichier après StreamReader utilisation
« fichier ne peut pas être accessible parce que le fichier est utilisé »
erreur en C#.
je manquer quelque chose, mais je ne sais pas quoi, voici le code:
fileEntries = from fullFilename
in Directory.EnumerateFiles(@"Data\csv\pending")
select Path.GetFileName(fullFilename);
i = 1;
foreach (string file in fileEntries)
{
if(i == 1)
{
folder = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName) + @"\Data\csv\done";
using (System.IO.FileStream fs = System.IO.File.Create(folder + @"\create-user.csv"))
{
}
using (System.IO.StreamWriter files = new System.IO.StreamWriter(folder + @"\create-user.csv", true))
{
files.WriteLine(",; prenom; nom; username; pasword; email; question; reponse; GroupID");
}
string curfile = @"\create-user-archive.csv";
if(!(File.Exists(folder + curfile)))
{
using (System.IO.StreamWriter files = new System.IO.StreamWriter(folder + @"\create-user-archive.csv", true))
{
files.WriteLine(",; prenom; nom; username; pasword; email; question; reponse; GroupID");
}
}
}
folder = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName) + @"\Data\csv\pending";
sb = new StringBuilder();
filef = new System.IO.StreamReader(folder + @"\create-user-" + i + ".csv");
line = filef.ReadLine();
while ((line = filef.ReadLine()) != null)
{
sb = new StringBuilder();
sb.AppendLine(line.Substring(0, line.Length));
folder = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName) + @"\Data\csv\done";
using (System.IO.StreamWriter files = new System.IO.StreamWriter(folder + @"\create-user.csv", true))
{
files.WriteLine(",; " + sb.ToString().Split(';')[1] + ";" + sb.ToString().Split(';')[2] + ";" + sb.ToString().Split(';')[1] + "." + sb.ToString().Split(';')[2] + ";" + GenerateToken(6) + ";" + sb.ToString().Split(';')[3] + ";" + "1" + ";" + "1");
}
folder = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName) + @"\Data\csv\done";
using (System.IO.StreamWriter files = new System.IO.StreamWriter(folder + @"\create-user-archive.csv", true))
{
files.WriteLine(",; " + sb.ToString().Split(';')[1] + ";" + sb.ToString().Split(';')[2] + ";" + sb.ToString().Split(';')[1] + "." + sb.ToString().Split(';')[2] + ";" + GenerateToken(6) + ";" + sb.ToString().Split(';')[3] + ";" + "1" + ";" + "1");
}
}
i++;
sourceFile = System.IO.Path.Combine(@"Data\csv\pending", file);
File.Delete(sourceFile);
}
ne doit pas le fichier cesser d'être utilisé après la StreamReader est terminée? J'ai essayé d'utiliser une fonction qui attend que le fichier soit déverrouillé pour supprimer le fichier, mais il est infini, ce qui signifie qu'il y a un processus sans fin que je dois arrêter, mais je ne vois pas lequel.
où fermez-vous 'filef'? – EpicKip
"Le fichier ne devrait-il pas cesser d'être utilisé après que le lecteur de flux ait fini?" comment l'ordinateur doit-il savoir que vous avez fini d'utiliser le fichier? Vous devez appeler 'Fermer' sur le lecteur. C'est le signe –
Si vous n'ouvriez pas et ne fermiez pas les mêmes fichiers plusieurs fois et que vous vous référez aux mêmes fichiers et dossiers de toutes sortes de façons, il vous serait plus facile de voir ce qui se passe. Par exemple, plutôt que de réutiliser la variable générique 'folder' pour différentes choses, créez-en une appelée' pendingFolder' pour faire référence à '' Data \ csv \ pending ''et une autre' doneFolder' pour faire référence '' "Data \ csv \ fait "". Définissez leur valeur _once_, puis utilisez ces variables au lieu de coder en dur le même chemin ultérieurement. – Rhumborl