C# 检查应删除哪些文件的最快方法
在服务器的响应中,我可以找到服务器上图像的路径。所以我通过路径将它们下载到本地文件夹 由于此响应并非每次都相同,我不希望本地文件夹中有未使用的图像,因此我希望删除它们 但是哪条路最快 是否删除所有图像,然后下载所有使用过的图像? 首先只下载不存在的图像,然后检查哪些保存的图像未使用? 或者,也许还有其他选择 谢谢 UPD 我有一张模特照 以及将图像保存到本地文件夹的方法C# 检查应删除哪些文件的最快方法,c#,delete-file,C#,Delete File,在服务器的响应中,我可以找到服务器上图像的路径。所以我通过路径将它们下载到本地文件夹 由于此响应并非每次都相同,我不希望本地文件夹中有未使用的图像,因此我希望删除它们 但是哪条路最快 是否删除所有图像,然后下载所有使用过的图像? 首先只下载不存在的图像,然后检查哪些保存的图像未使用? 或者,也许还有其他选择 谢谢 UPD 我有一张模特照 以及将图像保存到本地文件夹的方法 private static void SaveImageByUrl(string relativeUrl)
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,其中包含列表。所以我真的收到了列表的回复。当我这样做时,我异步地将图像保存到本地文件夹
所以,当我从数据库中清除数据时,最好清除本地文件夹中的所有图像,或者检查是否有来自响应的图像并将其删除?只下载您需要的图像,删除一次您不需要的图像。 这将比下载所有图像更快,当然,如果图像往往是相同的,如果您正在处理大量图像
如果图像已经x次未被使用,您也可以通过仅删除图像来增强代码我假设您的响应是源图像路径列表,然后您使用一些逻辑创建本地路径来创建本地副本 如果是这种情况,请反转逻辑,以便您可以确定原始路径应该来自本地路径 然后迭代本地图像,找出源图像是什么。如果响应中没有,请删除该文件 因此,如果您的逻辑是采用文件名和扩展名,但在不同的目录中,您可以将其反转
然后继续下载新的和更新的图像。你决定你的源图像是否会改变——如果不改变,就下载新的。否则,您也需要更新图像。这取决于你想要什么。您可以假设x天内的图像应该被替换,或者进行文件字节计数,看看它们是否不同。这个问题似乎离题了,但由于您明确要求其他选项。。。rsync是否满足您的要求@rsync-我不想要任何第三方组件。你的问题非常广泛,如果没有更多的上下文,我无法回答。这可能就是它被否决的原因。如果你能把问题说得更具体一些,那会有帮助的。有关如何改进此问题的提示,请参阅。只下载您需要的图像,删除不需要的图像一次。这是合乎逻辑的:但我不知道什么图像是无用的,什么是更快的-下载图像或检查我是否需要它?这是我想检查的,只是下载你需要的东西,需要你事先知道你需要什么。所以你需要检查一下。也许您可以先请求所有文件名的列表。将此列表与您已经拥有的文件进行比较,然后请求使用您尚未拥有的名称的所有文件。
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);
}
}
}
}