检查应删除哪些文件的最快方法
Fastest way to check what file should be deleted
在服务器的响应中,我可以找到服务器上图像的路径。所以我通过路径将它们下载到我的本地文件夹。
由于每次响应都不一样,我不希望本地文件夹中有未使用的图像,所以我想删除它们。
但是什么方式最快呢?
- 删除所有图像,然后下载所有使用过的图像?
- 先只下载不存在的图片,然后查看哪些保存的图片未使用?
或者,还有其他选择?
谢谢
UPD
我有模型ImageDTO
public class ImageDTO
{
public int Id{ get; set; }
public string FileLocation { get; set; }
}
以及将图像保存到本地文件夹的方法
private static void SaveImageByUrl(string relativeUrl)
{
if (!string.IsNullOrWhiteSpace(relativeUrl))
{
var localFilePath = new Uri(Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase) + relativeUrl).LocalPath;
if (!Directory.Exists(Path.GetDirectoryName(localFilePath)))
{
Directory.CreateDirectory(Path.GetDirectoryName(localFilePath));
}
if (!File.Exists(localFilePath))
{
var remoteFilePath = ConfigurationManager.AppSettings["SiteUri"] + relativeUrl;
using (var client = new WebClient())
{
client.DownloadFileAsync(new Uri(remoteFilePath), localFilePath);
}
}
}
}
属性 FileLocation
包含图像的相对路径。
我从服务器收到 Json
格式的响应。我将它反序列化为对象集合,清除本地数据库并将它们保存到本地数据库中(我也有 ProductDTO
,其中包含 List<ImageDTO>
。所以我确实收到了 List<ProductDTO>
的响应)。当我这样做时,我将图像异步保存到本地文件夹。
因此,当我从数据库中清除数据时,最好从本地文件夹中清除所有图像,或者检查我是否有不是来自响应的图像并将其删除?
只下载你需要的图片,删除一次你不需要的。
这将比下载所有图像更快,当然如果图像往往相同并且您正在处理大量图像。
您还可以通过仅删除 x 次未使用的图像来增强您的代码
我假设您的响应是源图像路径列表,然后您要使用一些构建本地路径的逻辑来创建本地副本?
如果是这种情况,请反转逻辑,以便您可以确定原始路径应该来自本地。
然后遍历本地图像并找出源图像。如果该内容不在响应中,请删除该文件。
因此,如果您的逻辑是获取文件名和扩展名但位于不同的目录中,则可以将其反转。
然后继续下载新的和更新的图像。你决定你的源图像是否会改变——如果他们不改变,那么就下载新的。否则你也需要更新图像。这取决于你想要什么。您可以假设超过 x 天的图像应该被替换或计算文件字节数以查看它们是否不同。
在服务器的响应中,我可以找到服务器上图像的路径。所以我通过路径将它们下载到我的本地文件夹。
由于每次响应都不一样,我不希望本地文件夹中有未使用的图像,所以我想删除它们。
但是什么方式最快呢?
- 删除所有图像,然后下载所有使用过的图像?
- 先只下载不存在的图片,然后查看哪些保存的图片未使用?
或者,还有其他选择?
谢谢
UPD
我有模型ImageDTO
public class ImageDTO
{
public int Id{ get; set; }
public string FileLocation { get; set; }
}
以及将图像保存到本地文件夹的方法
private static void SaveImageByUrl(string relativeUrl)
{
if (!string.IsNullOrWhiteSpace(relativeUrl))
{
var localFilePath = new Uri(Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase) + relativeUrl).LocalPath;
if (!Directory.Exists(Path.GetDirectoryName(localFilePath)))
{
Directory.CreateDirectory(Path.GetDirectoryName(localFilePath));
}
if (!File.Exists(localFilePath))
{
var remoteFilePath = ConfigurationManager.AppSettings["SiteUri"] + relativeUrl;
using (var client = new WebClient())
{
client.DownloadFileAsync(new Uri(remoteFilePath), localFilePath);
}
}
}
}
属性 FileLocation
包含图像的相对路径。
我从服务器收到 Json
格式的响应。我将它反序列化为对象集合,清除本地数据库并将它们保存到本地数据库中(我也有 ProductDTO
,其中包含 List<ImageDTO>
。所以我确实收到了 List<ProductDTO>
的响应)。当我这样做时,我将图像异步保存到本地文件夹。
因此,当我从数据库中清除数据时,最好从本地文件夹中清除所有图像,或者检查我是否有不是来自响应的图像并将其删除?
只下载你需要的图片,删除一次你不需要的。 这将比下载所有图像更快,当然如果图像往往相同并且您正在处理大量图像。
您还可以通过仅删除 x 次未使用的图像来增强您的代码
我假设您的响应是源图像路径列表,然后您要使用一些构建本地路径的逻辑来创建本地副本?
如果是这种情况,请反转逻辑,以便您可以确定原始路径应该来自本地。
然后遍历本地图像并找出源图像。如果该内容不在响应中,请删除该文件。
因此,如果您的逻辑是获取文件名和扩展名但位于不同的目录中,则可以将其反转。
然后继续下载新的和更新的图像。你决定你的源图像是否会改变——如果他们不改变,那么就下载新的。否则你也需要更新图像。这取决于你想要什么。您可以假设超过 x 天的图像应该被替换或计算文件字节数以查看它们是否不同。