正确处理文件流和二进制流以及处理文件流

2024-03-14

事实上,我尝试对我的代码进行防错,但最终使它看起来相当混乱。

我设置了一个函数来读取某种类型的文件。我希望函数在出现问题时返回 false,如果一切正常则返回 true。我无法弄清楚如何构建一切。

我有一个尝试打开文件流的初始 try-catch 块。但在那之后,我在读取过程中进行了某些其他检查,例如文件大小和某些偏移处的值。我设置它的方式是使用 if else 语句。例如:

if(condition){

}
else{
    MessageBox.Show("There was an error");
    br.Dispose();
    fs.Dispose();
    return false;
}

...br 是二进制读取器,fs 是文件流。像这样的块有很多,多次编写相同的内容似乎是不好的做法。首先想到的是将整个事情包装在 try-catch 语句中并抛出异常,而不是使用 if else 块。我记得在阅读有关 try-catch 语句的内容时,拥有它们很好,但不要用它们包装所有内容。老实说,我仍然不完全理解为什么将所有内容都包装在 try catch 语句中是不好的做法,因为它们只有在出现错误时才会起作用,在这种情况下程序无论如何都会出错......

另外,我是否必须关闭二进制读取器和文件流,或者关闭其中一个会关闭另一个吗?有什么方法可以使用它们而不必丢弃它们吗?


如何利用using关键词?这包含了您对IDisposable在 try-finally 块中;

bool success = true;

using(var fs = new FileStream(fileName, FileMode.Create)))
using(var br = new BinaryReader(fs))
{
  // do something
  success = result;
}

return success;

嵌套的 using 块将确保文件流和二进制读取器始终正确关闭和处置。

你可以阅读有关在 MSDN 中使用的更多信息 http://msdn.microsoft.com/en-us/library/yh598w02.aspx。它利用IDisposable更加简洁,消除了显式异常处理的需要。

关于您的发言:

我记得在阅读有关 try-catch 语句时,最好 拥有它们,但不要用它们包裹所有东西。

我总是使用一个简单的规则:如果我无法处理特定代码块中的异常并从中恢复,请不要尝试捕获它。允许异常在堆栈中“冒泡”到更有意义的位置来捕获它。通过这种方法,您会发现不需要添加许多 try-catch 块,您将倾向于在与服务(例如文件系统、网络等)集成时使用它们,但您的业务逻辑几乎总是没有异常处理机制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正确处理文件流和二进制流以及处理文件流 的相关文章

随机推荐

  • 适用于 Azure Service Fabric 无状态 Web API 应用程序的 Swagger

    我正在开发 Web API 服务并作为微服务托管在 Azure Service Fabric 上 我需要为 API 定义实现 Swagger 并且我可以看到 SwaggerConfig Register 方法在应用程序启动时未调用 所以我无
  • mysql_close 和 pg_close 是否是必需的? [复制]

    这个问题在这里已经有答案了 可能的重复 使用 mysql close https stackoverflow com questions 2065282 using mysql close 是否需要 mysql close 和 pg clo
  • Java HashMap Get 基准测试(JMH 与循环)

    我的最终目标是使用标准 Java 集合作为基线 为多个 Java 原始集合库创建一套全面的基准测试 过去我曾使用循环方法来编写此类微基准 我将要进行基准测试的函数放入循环中并迭代 100 万次以上 以便 jit 有机会预热 我计算循环的总时
  • 如何在Python中使用AutoReg预测时间序列

    我正在尝试仅使用自动回归算法来构建老式模型 我发现它有一个实现statsmodel包裹 我已阅读文档 据我了解 它应该像 ARIMA 一样工作 所以 这是我的代码 import statsmodels api as sm model sm
  • 使用 AND 和 OR 的 C# 谓词生成器

    我有以下课程 public class testClass public string name get set public int id get set public int age get set 和以下代码 var list new
  • 如何在 MySQL 中返回数据透视表输出?

    如果我有一个看起来像这样的 MySQL 表 company name action pagecount Company A PRINT 3 Company A PRINT 2 Company A PRINT 3 Company B EMAI
  • AttributeError:模块“jaxlib.xla_extension”没有属性“PmapFunction”

    有人可以帮我修复在 check not jax transformed f 中的 usr local lib python3 7 dist packages haiku src transform py in check not jax t
  • Ruby Mechanize:点击链接

    在 Mechanize on Ruby 中 我必须为我访问的每个新页面分配一个新变量 例如 page2 page1 link with text gt Continue click page3 page2 link with text gt
  • Cucumber 在一段时间后逐步停止执行

    我的一个测试会等到事件发生Then步 如果测试工作正常 则没有问题 但如果测试失败 即没有触发任何事件 那么它就会挂起 我怎样才能设置超时Cucumber I know JUnit有一个超时参数 您可以在 Test annotation h
  • 使用 Spark SQL 跳过/获取

    如何使用 Spark SQL 实现跳过 获取查询 典型的服务器端网格分页 我在网上搜索过 只能找到非常基本的示例 例如 https databricks training s3 amazonaws com data exploration
  • 使用键盘快捷键聚焦于文本字段

    我有一个 macOS Monterrey 应用程序 其中包含TextField在工具栏上 我用它来搜索我的应用程序上的文本 现在 我正在尝试添加键盘快捷键以专注于TextField 我尝试了下面的代码 添加带有快捷方式的按钮作为测试这是否可
  • 在sqlite不同数据库中触发

    我有 2 个不同的数据库 A 和 B 我需要创建一个触发器 当我在数据库 A 的表 T1 中插入任何条目时 数据库 B 的表 T2 的条目将得到已删除 请给我推荐一个方法 这不可能 在SQLite中 触发器内部的DML只能修改同一数据库的表
  • 将字符串提取函数包装在 ifelse 语句中

    下面的问题是一个延伸这个问题 https stackoverflow com questions 74135095 adding a column to the data that looks for a list of words and
  • 在现实世界应用中使用语义网络技术的示例[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 您正在开发使用 RDF OWL SPARQL 技术的 可能是商业的 产品吗 如果是这样 您能描述一下您的产品吗 O Reilly 的
  • 写入/编辑 CSV 文件(不要重写整个文件!)

    我需要替换直接在 CSV 文件上操作的客户端的某些功能 该文件用作系统的配置文件 搜索到的大多数案例都是关于从 CSV 读取到其他格式的 其他将整个 CSV 放入内存 附加专用行和更改 然后将它们写回新文件 或覆盖现有文件 我想更聪明地完成
  • Jetpack Compose 应用程序范围内的条件 TopAppBar 最佳实践

    我有一个 Android Jetpack Compose 应用程序 它使用BottomNavigation and TopAppBar可组合项 从通过打开的选项卡BottomNavigation用户可以更深入地导航到导航图 问题 The T
  • 如何在python中实现小批量梯度下降?

    我刚刚开始学习深度学习 当谈到梯度下降时 我发现自己陷入了困境 我知道如何实现批量梯度下降 我知道它是如何工作的以及小批量和随机梯度下降在理论上是如何工作的 但实在无法理解如何用代码实现 import numpy as np X np ar
  • 无法再加载 rgdal

    我在 Ubuntu 上将 GDAL 更新为 2 2 2 现在rgdal在 R 中失败 当我尝试加载时收到此消息rgdal 我也尝试更新rgdal 但没有成功 Error in get method envir home lazy load
  • 在 Android 应用程序中从 Web 获取 UTC 日期

    我想要一个UTC date对于我的 Android 应用程序来说 它是独立于设备 和用户 的 我听说过一些事情 比如从 NTP 服务器获取日期 但无法从 google 或 SO 找到任何帮助 那么任何人都可以帮我提供一些代码片段或链接吗 提
  • 正确处理文件流和二进制流以及处理文件流

    事实上 我尝试对我的代码进行防错 但最终使它看起来相当混乱 我设置了一个函数来读取某种类型的文件 我希望函数在出现问题时返回 false 如果一切正常则返回 true 我无法弄清楚如何构建一切 我有一个尝试打开文件流的初始 try catc