C# 关于如何在Try/Catch异常后忽略for循环中的文件,有什么建议吗?
我确实想就这个问题征求意见。现在我有一个自定义的文件监视程序,它只监视一个文件夹,检测是否有任何.json文件并反序列化它们。但是,它有可能读取无效的,并抛出异常。我面临的问题是,由于这是一个在3秒钟内重复调用的服务,它将继续读取无效文件,并用反序列化失败的尝试填充日志 我正在寻找解决这个问题的建议,我希望在这里寻求建议 我最初的想法是,一旦发现异常,立即进行文件复制,并将其移动到另一个位置,以便服务无法监视它。但是仔细想想,我认为如果服务能够识别出无效文件,并且在监视其他文件的同时不对该文件执行操作,那就更好了 下面是一段代码:C# 关于如何在Try/Catch异常后忽略for循环中的文件,有什么建议吗?,c#,json,C#,Json,我确实想就这个问题征求意见。现在我有一个自定义的文件监视程序,它只监视一个文件夹,检测是否有任何.json文件并反序列化它们。但是,它有可能读取无效的,并抛出异常。我面临的问题是,由于这是一个在3秒钟内重复调用的服务,它将继续读取无效文件,并用反序列化失败的尝试填充日志 我正在寻找解决这个问题的建议,我希望在这里寻求建议 我最初的想法是,一旦发现异常,立即进行文件复制,并将其移动到另一个位置,以便服务无法监视它。但是仔细想想,我认为如果服务能够识别出无效文件,并且在监视其他文件的同时不对该文件执
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);
}
IENumerable filesInDirectory=DirectoryInfo.GetFiles();
试一试{
if(filesInDirectory.Any())
{
foreach(filesInDirectory中的var文件)
{
if(file.Extension==“.json”)
{
记录器(“正在反序列化文件“+file.Name+”);
//在此处读取文件内容并反序列化
}
}
Logger(“该文件已在“+DateTime.Now()”反序列化);
}
抓住
{
//这里处理了异常。最初是File.Copy和File.Delete(File.FullName);
}
实际上,我的想法是在var文件
本身上放置一个布尔值,在.json条件满足时将其标记为read,如果它抛出异常,则会将其设置为true,并将其读取和忽略。但是,鉴于FileInfo
类是一个系统类
如果反序列化完成,文件将从目录中删除,但如果目录中保留无效文件;Logger
是我编写的一个自定义函数,通过将消息输出到文本文件来记录服务的操作,日志文本文件将显示它一直在递归地尝试反序列化无效文件id json文件,只要它保留在文件夹中
用户可能会意外地将未映射到Foo
对象的.json文件放入其中,我不想触摸该文件,只需跳过它即可
这超出了我的家庭作业范围,但我想知道这个想法是否可行或可实施,我真的很想看到任何关于这方面的建议或建议。可能您需要学习如何编写防御代码,请执行以下操作:
JsonDocument.parse()
的示例:
在本例中,您将有3个catch语句
- 不信任文件扩展名
- 不要相信文件大小
- 不要假设您可以打开该文件进行读取(它可以通过NTFS进行加密)
- 在rety工具中构建。仅仅因为第一次失败,并不意味着第二次失败。(可能该文件只是由一些简单的东西打开的,比如反病毒)