次のコードは、 'プロセスはファイルにアクセスできません'というメッセージが表示されたSystem.IO.IOExceptionを返します。C1ZipFileを使用した後、このファイルを削除できないのはなぜですか?
private void UnPackLegacyStats()
{
DirectoryInfo oDirectory;
XmlDocument oStatsXml;
//Get the directory
oDirectory = new DirectoryInfo(msLegacyStatZipsPath);
//Check if the directory exists
if (oDirectory.Exists)
{
//Loop files
foreach (FileInfo oFile in oDirectory.GetFiles())
{
//Check if file is a zip file
if (C1ZipFile.IsZipFile(oFile.FullName))
{
//Open the zip file
using (C1ZipFile oZipFile = new C1ZipFile(oFile.FullName, false))
{
//Check if the zip contains the stats
if (oZipFile.Entries.Contains("Stats.xml"))
{
//Get the stats as a stream
using (Stream oStatsStream = oZipFile.Entries["Stats.xml"].OpenReader())
{
//Load the stats as xml
oStatsXml = new XmlDocument();
oStatsXml.Load(oStatsStream);
//Close the stream
oStatsStream.Close();
}
//Loop hit elements
foreach (XmlElement oHitElement in oStatsXml.SelectNodes("/*/hits"))
{
//Do stuff
}
}
//Close the file
oZipFile.Close();
}
}
//Delete the file
oFile.Delete();
}
}
}
ファイルがまだロックされている場所を確認するのが難しいです。ファイルへのハンドル上に保持される可能性のあるすべてのオブジェクトはブロックを使用しており、明示的に閉じられています。
静的なGetFilesメソッドによって返される文字列ではなく、FileInfoオブジェクトを使用することとは何か?
アイデア?
どこで例外が発生していますか? –
@Joshua - On oFile.Delete(); – stevehipwell