私は、StreamReaderを使用した後にファイルを削除することができるように見えることはできませんStreamReaderを使用した後にファイルを削除することはできませんC#が
「ファイルが使用中であるため、ファイルにアクセスすることができません」
C#でエラーが発生しました。
私は何かを逃すかもしれないが、私は、ここにコードが何であるかを知らない:
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);
}
ファイルは、StreamReaderを終了後に、使用中であることを停止べきではないのですか?ファイルを削除するためにファイルがロック解除されるまで待つ関数を使用しようとしましたが、無限になります。つまり、終了する必要のないプロセスが存在しますが、どちらが表示されないのでしょうか?
どこで 'filef'を終了しますか? – EpicKip
"ストリームリーダーが終了した後にファイルが使用中であってはなりませんか?"あなたは今、あなたがファイルの使用を終了したことをコンピュータがどのように知るべきですか?=!読者は 'Close'を呼び出す必要があります。それは記号です –
同じファイルを複数回開いたり閉じたりしなかった場合、さまざまな方法で同じファイルやフォルダを参照すると、何が起きているのかが分かりやすくなります。たとえば、非常に汎用的な 'folder'変数を別のものに再利用するのではなく、' 'Data \ csv \ pending ''を参照する '' pendingFolder'と '' Data \ csv \' 'を参照する '' doneFolder''を作成します。完了しました。その値を_once_に設定し、後で同じパスをハードコーディングする代わりに実際にそれらの変数を使用します。 – Rhumborl