在调试或正常运行时读取字符串时出现 NullReferenceException [关闭]

2024-04-19

当尝试在调用时读取文件时DoSomething(); (from Something();) 在里面TestProgram_Load()方法,我遇到一个NullReferenceException,我很难理解。

当尝试检查文件是否存在,甚至尝试读取文件时,会发生这种情况。但是,我可以毫无问题地写入文件,and引用字符串值,即使在调试器中也是如此。

这是问题代码:

// No matter the file name, this fails every time.
string fileName = "file.txt";

public void DoSomething()
{
    if (File.Exists(fileName)) // NullReferenceException
    {
        using (StreamReader r = new StreamReader(fileName)) // NullReferenceException
        {

        }
    }
}

以及调用它的方法:

public void Something()
{
    // This works fine
    if (!File.Exists(fileName))
    {
        // This works fine
        using (StreamWriter w = new StreamWriter(fileName))
        {
             w.Write("Test");
        }
    }

   // Test to see if there's an issue with this method too...
   // This is fine, but whether or not File.Exists(fileName) is used, DoSomething(); has the same problem.

   if (File.Exists(fileName))
   { 
       DoSomething(); 
   }

}

这是 TestProgram_Load 方法:

private void TestProgram_Load(object sender, EventArgs e)
{
    TestClass t = new TestClass();
    t.Something();
}

这是堆栈跟踪:

at TestProgram.TestClass.DoSomething() in Visual Studio 2015\Projects\Test Program\Test Program\Classes\FileSystem\TestClass.cs:line 39
at TestProgram.Program.Main() in Visual Studio 2015\Projects\Test Program\Test Program\Program.cs:line 19
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()

第 39 行:

if (File.Exists(fileName))

该代码在主程序的启动函数中执行:或者在构造函数中,或者在TestProgram_Load()方法:两者都有同样的问题。根本不应该有任何线程。

以下是一些关键细节:

  1. 我尝试读取该文件,DoSomething();
  2. 该字符串值存在于调试器中,可以在之前引用File.Exists(fileName)
  3. File.Exists(fileName)以不同的方法工作,但不是这个。
  4. 该字符串根本没有更新.
  5. 字符串值是硬编码的。
  6. 没有额外的线程来干扰这一点。

我希望它能够真正检测到文件的存在,当然,还可以打开文件。这里发生了什么?


有趣的是,File.Exists 的文档 https://msdn.microsoft.com/en-us/library/system.io.file.exists(v=vs.110).aspx states:

Exists 方法返回false如果尝试时发生任何错误 判断指定的文件是否存在。这可能发生在以下情况 引发异常,例如传递无效的文件名 字符或字符过多、磁盘出现故障或丢失,或者 调用者没有读取该文件的权限。

我最初的倾向是相信当您尝试读取时写入仍在完成,但根据文档,这仍然应该返回 false。听起来像是 .Net 内部错误。

我没有明确的答案,但您也许可以通过以下方式找到根本原因:

  • 写入后放置 Thread.Sleep 1000 毫秒
  • 使用 FileInfo 而不是 File(以防 File 中存在错误)
  • 不要检查 File.Exists 并查看您的流是否会给出更具描述性的错误

如果这些不起作用,并且您知道该字符串第一次可以工作,则可以尝试完全切换到使用 FileInfo 类。就像是:

var file = new FileInfo(fileName);
if (!file.Exists())
{
    using (var writer = file.CreateText())
    {
        writer.Write("test");
    }
}
using (var writer = file.OpenText())
{
    // do stuff
}

如果我的代码无法构建,请原谅。我的设备上没有安装 Visual Studio。

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

在调试或正常运行时读取字符串时出现 NullReferenceException [关闭] 的相关文章

  • Eigen 未对齐数组断言

    我有一个类可以找到二维点集的凸包 它包含一个结构体 其中有 2Eigen Matrix
  • 退回 10 天后结束的拍卖

    我的 api xml 对于从当前到 10 天结束的返回拍卖工作正常 但对于 10 天后结束的列表不起作用 这是我下载结果的方式 public string DownLoad string url used to build entire i
  • QWebView / Qt WebKit 不会打开某些 SSL 页面;不允许重定向?

    在带有 Visual C 2008 SP1 的 Windows 7 上全新安装 Qt SDK 1 1 4 我正在使用 Qt Creator 为什么此代码无法加载某些网页 include
  • 如何在 C++ 中将方法结果作为参数传递给基类构造函数?

    我试图实现这样的目标 class Base public Base string S class Derived Base public int foo string bar return stringof foo actually som
  • 按属性值对结构体数组进行排序

    我在 C 中有一个任务 使用 qsort 对结构进行排序 struct user enum SEX m f sex char name 32 char phonenr 32 typedef struct user User 用户将存储在一个
  • 代表和活动之间有什么区别?

    代表和活动之间有什么区别 两者不都包含对可以执行的函数的引用吗 An Event声明增加了一层抽象和保护delegate实例 此保护可防止委托的客户端重置委托及其调用列表 并且仅允许在调用列表中添加或删除目标
  • C:epoll和多线程

    我需要创建专门的 HTTP 服务器 为此我计划使用 epoll sycall 但我想利用多个处理器 核心 但我无法提出架构解决方案 ATM我的想法如下 使用自己的epoll描述符创建多个线程 主线程接受连接并将它们分配给线程epoll 但还
  • 如何在 g++ 中使用不同的 STL

    我想对 g 使用不同的 STL 而不是其默认的 libstdc 做到这一点最简单的方法是什么 我发现 nostdinc 标志禁止 g 查找其 STL 标头 但这只是编译时的事情 它仍然会使 g 链接到它自己的 STL 所以我需要找到一种方法
  • 从 SQL 获取 xml 属性

    对于此 xml 在 SQL 2005 XML 列中
  • 为什么宇宙飞船与盒子对撞机相撞后不再回头?

    我希望当发生碰撞时将宇宙飞船转回来 但他们继续前进 开箱即用的对撞机和地形 使克隆船在碰撞时我想返回的脚本 using System using UnityEngine using Random UnityEngine Random usi
  • C# 中的私有“集合” - 无法理解它

    我见过很多使用类似的东西编写的示例代码 请原谅这是多么可怕的罐头 public class Test public object Thingy get private set 不幸的是 这些例子从未真正解释为什么 set 被设置为私有 所以
  • 计时器、事件和垃圾收集:我错过了什么吗?

    考虑以下代码 class TestTimerGC Form public TestTimerGC Button btnGC new Button btnGC Text GC btnGC Click sender e gt GC Collec
  • 使用带有 MSVC 2015 编译器的 QT Creator 5.8

    我是新来的C 和编程 我正在尝试做一个小项目 使用Qt and Qt Creator 我当时用的是MinGW compiler 但对于这个项目 我需要与MSVC compiler 因为我需要使用QtWebEngineWidgets I ha
  • 如何向 Json.NET 输出添加注释?

    有没有办法可以自动将注释添加到 Json NET 的序列化输出中 理想情况下 我想它类似于以下内容 public class MyClass JsonComment My documentation string public string
  • C# 计算 int 数组中值的平均值

    当我尝试打印 int 数组中的值的平均值时 它会打印出与我有值一样多的完全不同的东西 这是什么问题 int numbers numbers new int 5 Console WriteLine give five integer numb
  • 从 Unity WebGL 调用 Angular2 函数

    目前 我正在使用 Angular2 版本 2 1 2 和 Unity 可视化工具 使用 Unity 5 5 构建 我需要做的是从 Unity 到 Angular2 进行通信 我正在使用类似于下面的代码 public void GetBill
  • 使用相同的 SqlConnection 对 SqlCommand.BeginExecuteNonQuery 进行多个并发调用

    我有一些可用的 C 代码 它使用 SqlConnection 创建临时表 例如 Foo 调用存储过程来填充这些临时表并将结果返回到 C 客户端 使用 C 对这些结果执行复杂的计算 并使用计算结果更新之前创建的临时表之一 由于整个过程中都会使
  • C# 数据库包装设计

    我正在为 C 设计一个数据库包装器 以下是我有两个选择 选项A class DBWrapper IDisposable private SqlConnection sqlConn public DBWrapper sqlConn new S
  • 使用 Linq 获取当前和上一个项目

    我有一个 Offer 类 例如 public class Offer public int OfferID get set public DateTime OfferDate get set public int CustomerID ge
  • 类和结构在填充和继承方面的区别

    以下所有操作都将在 GCC 9 1 上使用编译器资源管理器 https github com mattgodbolt compiler explorer 在 x86 64 中 使用 O3 我有这个代码 struct Base Base do

随机推荐

  • 应用程序更新时的 NSUserDefaults 行为

    我的 iOS 应用程序中有一个方法 可以在检测到我的服务器具有适用于我的应用程序的更高版本 新的 ipa 版本 时更新应用程序 如果用户想要下载它 该应用程序会在 iPad 上自行更新 问题是 当应用程序第一次打开新版本时 我想更新数据库中
  • Amazon Elastic Beanstalk npm 找不到 package.json

    我对亚马逊网络服务非常陌生 我正在尝试在他们的弹性beanstalk上设置一个node js应用程序 我设置了实例并上传 部署了站点 但是虽然运行状况 正常 但 node js 日志显示此情况重复了大约 30 次 npm ERR enoen
  • 如何使用 Netty 发送对象?

    如何通过Netty从服务器端发送bean并在客户端接收该bean 当我发送简单的整数消息 inputstream 时 它工作成功 但我需要发送 bean 如果您在客户端和服务器端使用 Netty 那么您可以使用 Netty对象解码器 htt
  • 以编程方式关闭 WP7 应用程序? [复制]

    这个问题在这里已经有答案了 可能的重复 Windows Phone 7 关闭应用程序 https stackoverflow com questions 3659195 windows phone 7 close application 如
  • 表达忽略视图目录

    我已经设置了一个配置文件来存储我的 Express 应用程序的应用程序路径 cookie 秘密等设置 问题是它似乎忽略了我的视图路径目录设置 配置 js exports server port 3000 cookie secret path
  • 使用类的 __new__ 方法作为工厂:__init__ 被调用两次

    我在 python 中遇到了一个奇怪的错误 其中使用 new 将类的方法作为工厂会导致 init 实例化类的方法被调用两次 这个想法最初是为了使用 new 母类的方法根据传递的参数返回其子类之一的特定实例 而无需在类外部声明工厂函数 我知道
  • 需要类或命名空间;语法正确且正确

    在 dualstk h 中 ifndef 32 dualstk h define 32 dualstk h include
  • AWS 检查状态机/Step Functions 并发运行

    我在处理状态机 步骤函数 的并发运行时遇到很多问题 该状态机中确实有胶水作业任务 状态机由 Lambda 启动 并由 FIFO SQS 队列触发 lambda 获取消息 检查正在运行的状态机实例数量 如果该数量低于 GlueJob 并发运行
  • .htaccess 将一个文件夹中的所有文件重定向到另一个文件夹中的完全相同的文件

    我们只需将名为 音乐 的目录中的每个页面移动到名为 信息 的目录 这是唯一的更改 有很多指向音乐页面的链接 我们不想全部破坏 我不擅长重写条件 基本上 我想做的就是当用户输入 music index php 或 music life myp
  • 复合属性

    有没有办法在 C 中制作复合属性以在编译时提供等效的元数据 例如 改变 ClassInterface ClassInterfaceType AutoDual ProgId MyProgId MyMefExport MyProgId publ
  • 有没有办法使用 getUserMedia 减少延迟?

    在尝试减少视频延迟的同时WebRTC通信时 我测量了视频捕获和视频显示之间的延迟 为了防止测量 WebRTC 涉及的延迟 我只是使用getUserMedia和一个 HTMLvideo显示流 我通过每帧显示时间戳来做到这一点 使用reques
  • 编译器错误:对调用的引用不明确

    Case 1 static void call Integer i System out println hi i static void call int i System out println hello i public stati
  • 更改 ToolStripMenuItem 的大小

    我正在自定义绘制一个菜单项MenuStrip 我遇到的问题是菜单项坚持根据文本调整自身大小 这不是我想要的 没有文本 我可以设置AutoSize设置为 false 并显式指定大小 但包含的菜单 ToolStripDropDown 仍然根据文
  • $_POST、$_GET 和 $_REQUEST 为空

    SOLVED 我省略了输入字段中的名称属性 我有一个简单的 html php 表单 我提交了 POST 始终为空 如果我尝试 get 那么 GET 总是空的 REQUEST 和 php input 相同 我没有得到任何回报 有很多关于这个主
  • AVCaptureVideoPreviewLayer 和从相机位置预览

    我正在开发一个允许用户拍照的应用程序 我已经开始使用AVCam https developer apple com library ios samplecode AVCam Introduction Intro html苹果提供了 但我实际
  • ElasticSearch - 索引模板和索引模式有什么区别

    我在这里阅读了对我的问题的解释 https discuss elastic co t whats the differece Between index pattern and index template 54948 https disc
  • 如何通过 django admin 中的操作请求用户输入?

    在我的代码中 我正在编写一个分组操作 我想询问用户每个组需要多少人 然后用一个警报框进行响应 根据用户输入显示 您有 4 个组 的内容 我如何在 django admin 中执行此操作 如何创建某种弹出窗口来询问他们想要放入一个组中的人数
  • 默认移动构造函数/赋值和删除的复制构造函数/赋值

    根据标准 如果类 X 的定义没有显式声明移动构造函数 则当且仅当 X 没有用户声明的复制构造函数 X 没有用户声明的复制赋值运算符 X 没有用户声明的移动赋值运算符 并且 X 没有用户声明的析构函数 现在以下无法编译 include
  • Highstocks 图表宽度未正确呈现

    您好 我在使用 jquery 选项卡时遇到 highstocks 问题 这是构造函数的代码 Chart new Highcharts StockChart Chart new Highcharts StockChart chart rend
  • 在调试或正常运行时读取字符串时出现 NullReferenceException [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 当尝试在调用时读取文件时DoSomething from Something 在里面TestProgram Load 方