如何在文件保存到数据库 60 秒后删除该文件?

  • 本文关键字:文件 删除 数据库 保存 c#
  • 更新时间 :
  • 英文 :


我在这里需要一些帮助。

在我的控制台应用中,当文件添加到目录时,它会将其保存在数据库中。 所有这些都有效。 我遇到的问题是,在本周末将添加一个具有相同名称的新文件。

因此,当文件添加到该文件夹后,它应该在 60 秒后删除它们。

这是我拥有的代码,但它不起作用。

private static void FileSystemWatcher_Created(object sender, FileSystemEventArgs e)
{
Console.WriteLine("File created: {0}", e.Name);
string connectionString = @"Data Source=Development-PCSQLEXPRESS;Initial Catalog=FileDB;Integrated Security=True";
FileInfo info = new FileInfo(e.FullPath);
byte[] file;
using (var fileStream = File.OpenRead(e.FullPath))
{
BinaryReader reader = new BinaryReader(fileStream);
file = reader.ReadBytes((int)fileStream.Length);
}
//FileStream stream = new FileStream(e.Name, FileMode.Open, FileAccess.ReadWrite);
//BinaryReader reader = new BinaryReader(stream);
//byte[] file = reader.ReadBytes((int)stream.Length);
//reader.Close();
//stream.Close();
DateTime dateTimeVariable = DateTime.Now;
SqlConnection connection = new SqlConnection(connectionString);
using (var command = new SqlCommand("INSERT INTO FileTable (filename, filecontent, datestamp) VALUES (@filename, @filecontent, @datestamp)", connection))
{
command.Parameters.Add("@filename", SqlDbType.NVarChar).Value = info.Name;
command.Parameters.Add("@filecontent", SqlDbType.VarBinary, int.MaxValue).Value = file;
command.Parameters.Add("@datestamp", SqlDbType.DateTime).Value = dateTimeVariable;
connection.Open();
command.ExecuteNonQuery();
}
string[] files = Directory.GetFiles(@"C:Database");
foreach (string filed in files)
{
FileInfo fi = new FileInfo(filed);
if (fi.CreationTime < DateTime.Now.AddSeconds(60))
fi.Delete();
}
}

编辑

它会立即删除它,而不是等待 60 秒

fi.CreationTime < DateTime.Now.AddSeconds(60)

当然永远是真的。 应该是这样的:

fi.CreationTime.AddSeconds(60) < DateTime.Now
if (fi.CreationTime < DateTime.Now.AddSeconds(60))

应更改为:

if (fi.CreationTime <= DateTime.Now.AddSeconds(-60))

这是因为您当前正在检查创建时间是否在未来 60 秒之前(始终如此(。但是,您应该检查创建时间是否在当前时间减去 60 秒之前。

最新更新