gpt4 book ai didi

c# - 关于如何在 Try/Catch 异常后忽略 for 循环中的文件的任何建议?

转载 作者:太空宇宙 更新时间:2023-11-03 22:32:33 24 4
gpt4 key购买 nike

我确实想就这个特定问题寻求建议。现在我有这个自定义文件观察器,它只观察一个文件夹并检测是否有任何 .json 文件并反序列化它们。但是,它有可能读取无效的并抛出异常。我面临的问题是因为它是一个在 3 秒内被重复调用的服务,它会继续读取无效文件并用不成功的反序列化尝试填充日志。

我正在寻找解决这个问题的建议,希望能在这里寻求建议。

我最初的想法是一旦捕获到异常立即执行 File.Copy 并将其移动到另一个位置,以便服务无法监视它。但仔细想想,我觉得如果服务能识别出无效文件,而不是在监视其他文件的同时不对该文件执行操作,那就更好了。

这是一段代码:

IENumerable<FileInfo> filesInDirectory = DirectoryInfo.GetFiles();

try {

if(filesInDirectory.Any())
{

foreach(var file in filesInDirectory)
{

if(file.Extension == ".json")
{
Logger("The file " + file.Name + " is being deserialized.");
//The file is read here for its contents and deserialized
}

}

Logger("The file has been deserialized at " + DateTime.Now());

}

catch
{

//Exception handled here. Initially it was File.Copy and File.Delete(file.FullName);
}

我的想法实际上是在 var 文件 本身上放置一个 bool 值,在满足 .json 条件时将其标记为已读,如果它抛出异常,它将被设置确实,它被读取并被忽略。但是,我认为我无法将属性附加到 FileInfo 类,因为它是一个系统类。

如果反序列化完成,文件将从目录中删除,但如果目录中仍然存在无效文件; Logger 这是我编写的自定义函数,通过将消息输出到文本文件来记录服务的操作,日志文本文件将显示它一直递归尝试反序列化无效的 json 文件,只要它保留在文件夹中。

用户可能会不小心将未映射到 Foo 对象的 .json 文件放在那里,我不想触摸该文件,只是跳过它。

我的想法超出了我的家庭作业范围,但我想知道这个想法是否可行或可实现,我真的很想看到有关这方面的任何建议或意见。

最佳答案

The initial idea for me was to immediately do a File.Copy once the exception is caught and move it to another location so that it can't be watched by the service. But upon thinking about it, I figure it would be better if the service can recognize the invalid file and not perform the operation on said file while watching for others.

在消息队列处理是否是MSMQ; JMS; Apache ;网域;消息的概念是,在一定次数的重试失败后,如果无法处理该项目,则将其视为毒消息并移至毒消息队列以备后用运营调查。

您可以将相同的概念应用于文件处理。如果在尝试之后您无法处理它,要么是因为它是一个格式错误的文件;一个报告它是 JSON 文件但实际上是 Miss Piggy 的 JPEG 的文件,错误地命名为 kermit.JSON;将其移至 Poison File 文件夹。

不能假设仅仅因为某些东西声称属于某种类型,它就是在说真话。换句话说:

  • 不要相信文件扩展名
  • 不要相信文件大小
  • 不要假设您可以打开文件进行阅读(它可能被 NTFS 加密)
  • 建立一个 rety 设施。仅仅因为它第一次失败,并不意味着它会第二次失败。 (也许文件只是被一些类似杀毒软件的东西短暂地打开了)

关于c# - 关于如何在 Try/Catch 异常后忽略 for 循环中的文件的任何建议?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56684845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com