我想删除这样的文件:
List<FichierModels> liste = fichiers.GetFichiersFromDirectoy(_directory_id);
//supprimer les fichiers expirés
foreach (Models.FichierModels fich in liste)
{
if (fich.Expiration_date < DateTime.Now)
{
System.IO.File.Delete(fich.Url);
fich.Delete_fichier(fich.Id);
}
}
public List<FichierModels> GetFichiersFromDirectoy(int _id_dir)
{
List<FichierModels> l = new List<FichierModels>();
Data.Connect();
using (Data.connexion)
{
string queryString = @"select Id, Id_directory, Url, Upload_date, Last_download, Downloads_count, Taille, Expiration_date, Name from Fichier where Id_directory = @Id_directory ";
SqlCommand command = new SqlCommand(queryString, Data.connexion);
command.Parameters.AddWithValue("@Id_directory", _id_dir);
try
{
SqlDataReader reader = command.ExecuteReader();
do
{
while (reader.Read())
{
FichierModels fichier = new FichierModels();
fichier.Id = reader.GetInt32(0);
fichier.Id_directory = reader.GetInt32(1);
fichier.Url = reader.GetString(2);
fichier.Upload_date = reader.GetDateTime(3);
fichier.Last_download = reader.GetDateTime(4);
fichier.Downloads_count = reader.GetInt32(5);
fichier.Taille = reader.GetDouble(6);
fichier.Expiration_date = reader.GetDateTime(7);
fichier.Name = reader.GetString(8) ;
l.Add(fichier);
}
} while (reader.NextResult());
return l;
}
catch { return null; }
}
}
我使用了这个功能:
public void ExtractArchive(string zipFilename, string ExtractDir)
{
ZipInputStream zis = null;
FileStream fos = null;
try
{
zis = new ZipInputStream(new FileStream(zipFilename, FileMode.Open, FileAccess.Read));
ZipEntry ze;
// on dezippe tout dans un rep du nom du zip, pas en bordel
Directory.CreateDirectory(ExtractDir);
while ((ze = zis.GetNextEntry()) != null)
{
if (ze.IsDirectory)
{
Directory.CreateDirectory(ExtractDir + "\\" + ze.Name);
}
else
{
if (!Directory.Exists(ExtractDir + "\\" + Path.GetDirectoryName(ze.Name)))
{
Directory.CreateDirectory(ExtractDir + "\\" + Path.GetDirectoryName(ze.Name));
}
fos = new FileStream(ExtractDir + "\\" + ze.Name, FileMode.Create, FileAccess.Write);
int count;
byte[] buffer = new byte[4096];
while ((count = zis.Read(buffer, 0, 4096)) > 0)
{
fos.Write(buffer, 0, count);
}
}
}
}
finally
{
if (zis != null) zis.Close();
if (fos != null) fos.Close();
}
}
但我有一个异常,表明该文件被另一个进程使用。如何暂停此过程,删除文件然后继续该过程?