【问题标题】:Problem with if/then statement and streamreaderif/then 语句和流式读取器的问题
【发布时间】:2011-09-04 12:06:09
【问题描述】:

在我的程序中,我实现了代理支持。

我设置了一个带有复选框的 if/then 语句,所以基本上它说如果复选框被选中,则激活代理并使用用户上传到列表框中的代理。

我的代码中还设置了一些流式阅读器,用于在文本框中导入文本文件的文本。当我尝试做代理并尝试导入文本文件时,它给了我一些错误,说找不到文件,但是当我不选中复选框以使用代理时,它导入它就好了。

这是复选框的代码:

if (chkBoxProxy.Checked)
{
    if (listBox1.SelectedIndex < listBox1.Items.Count - 1)
    {
        listBox1.SelectedIndex = listBox1.SelectedIndex + 1;
        listBox1.SetSelected(listBox1.SelectedIndex, true);
        RefreshIESettings(listBox1.SelectedItem.ToString());

        for (int i = 0; i < numericUpDown2.Value; i++)
        {
            listBox4.SetSelected(i, true);
            listBox4.SelectedItem.ToString();

           account();
        }
    }
}
else
{
    for (int i = 0; i < numericUpDown2.Value; i++)
    {
        listBox4.SetSelected(i, true);
        listBox4.SelectedItem.ToString();

        account();
    }
}

这是我拥有的几个流阅读器之一的代码:

StreamReader stream1 = new StreamReader("website.txt");
string stream2 = stream1.ReadToEnd();
txtBoxImportWebsite.Text = stream2;

stream1.Close();
stream1.Dispose();

【问题讨论】:

  • 您的代码中存在一些问题(listBox4.SelectedItem.ToString() 没有做任何事情,您应该使用using 关闭流而不是手动调用Dispose()),但没有什么会导致你描述的错误。哪一行抛出异常?文件真的存在吗?您可以发布异常的完整堆栈跟踪吗?
  • 当你说“给我一些错误”时,你是什么意思?它会引发异常吗?您是否查看过调用堆栈以验证哪一行代码引发了该异常? (你在传递什么?)否则我的精神力量告诉我“website.txt”不在当前工作目录中(你应该使用文件名的完整路径)或其他一些代码行文件io 正在抛出该异常。
  • listbox4.SelectedItem.ToString () 基本上是获取列表框中的项目并将其用于代理。如果我首先检查代理复选框,它不是导致错误的特定行,它是所有流阅读器。确切的错误是:未处理 FileNotFoundException。我想我有一个很好的预感是什么导致了这个问题。当我检查代理复选框时,它在我的文档中而不是在程序文件夹中,当我不检查它时,它在程序文件夹中。我该如何解决这个问题?
  • 尝试解决此问题的第一步是充分了解您的代码以发布示例,这些示例首先正确描述了问题,然后以某种方式连接。我根本无法判断“您拥有的几个流阅读器之一的代码”与第一个代码示例的连接位置。此外,如果我们看不到您的文件 IO 代码的外观,也无法告诉您如何解决文件夹问题。这就像在不给我们 x 的值的情况下问 x * 243 等于多少 ...
  • 我发现这是我放入线程的第一部分代码导致了问题。

标签: c# proxy httpwebrequest streamreader


【解决方案1】:

男孩,您的代码还不够完整,我们应该准确地看到您调用流管理的所有位置。文件website.txt 是从哪里/从哪里创建的?为什么打开时没有指定完整路径?

作为一般规则,您应该使用 using so close 包装您的 Streams,并且在使用块结束时会自动调用 dispose,并且在出现异常时,您可以以这种方式重写您的最后一个片段:

using (var stream1 = new StreamReader("website.txt"))
{
  txtBoxImportWebsite.Text = stream1.ReadToEnd();
}

【讨论】:

  • 我没有指定完整路径,因为这些文本文件都包含在安装软件的位置。它有效,因为我测试了它。我将添加使用语句,谢谢。也许它会解决问题。
  • 单独使用并不能最终解决您的所有问题,但正如我所说,您应该显示更多代码。
  • 不,问题仍然存在。这很奇怪,因为当我填写一个文本框然后转到代理并单击复选框然后返回其他导入工作但是当我先检查它然后尝试导入它不起作用。
  • 从哪里调用 StreamReader stream1 = new StreamReader("website.txt"); ?
  • 如果我正确理解了您的问题,我会通过按钮调用它。我为每个流阅读器设置了单独的按钮。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-27
  • 2015-07-30
  • 2022-01-22
相关资源
最近更新 更多