1

我对visual basic(和一般的编码)很陌生,所以如果我犯了任何非常简单的错误,请告诉我。
现在,我的 vb.net 代码遇到了一个非常奇怪的问题。文件流能够正确打开文件并从中读取 - 但奇怪的是,虽然代码能够从文件开头读取一堆行,但当我在记事本中手动打开文件时,我不是。这是代码:

    Dim fs, f, s 'filesystemobject, file, stream.
    fs = CreateObject("Scripting.FileSystemObject")
    f = fs.GetFile(CurrDataPath) ' This change made to ensure the correct file is opened
    s = f.OpenAsTextStream(1, 0) ' 1 = ForReading, 0 = as ASCII (which i think is right?)
    Dim param(14) As String
    Dim line As String
    line = s.ReadLine()
    While i <= 14
        i += 1
        MessageBox.Show(line)
        line = s.ReadLine()
    End While

(我读过数组是个坏主意,但它们很方便并且没有给我带来任何问题,所以我一直在使用它们。)
奇怪的是,当这段代码运行时,它会(在消息框)显示我想看到的信息 - 这一点也不差。我想要的信息如下所示:

BEGINPARAM  
parameter1, 0  
parameter2, 7.5  
ENDPARAM

编辑:使用后Path.GetFullPath(DFile),我发现在不同的目录中有两个同名的文件DFile。我在记事本中打开的文件保存在我希望保存它的目录中,而代码正在读取的文件保存在 VB 项目的文件夹中。
一旦我将代码更改为依赖CurrDataPath包含预期路径的代码,从文件中读取的代码与我在记事本中所做的完全相同。
我在记事本中确实有自动换行,所以我知道这不是问题,但是,我会考虑使用记事本++。
名为 DFile 的文件是在一个 c++ 程序中创建的,我将深入研究该程序以找出为什么将文件的一部分写入与其余部分不同的文件夹。

显然我错过了一些重要的东西,如果有人可以提供帮助,那就太好了。
*注意:这是一个 vb6 迁移项目,所以如果有人问我可以提供旧代码。

4

2 回答 2

1

假设最新版本的 VB.Net,现代的写法是这样的:

For Each line As String In File.ReadLines(CurrDataPath).Take(14)
   MessageBox.Show(line)
Next
于 2013-08-16T23:54:36.127 回答
0

我不是 100% 清楚你在说什么。此代码中没有任何内容输出到文件,因此您必须说的是,当您打开上面第 3 行中“DFile”引用的文件时,该文件没有包含“parameter1, 0”的行和“parameter2, 7.5”在里面吗?

由于我们知道这在技术上是不可能的,因此请验证上述问题的答案,并确保您确实在记事本中打开了与脚本打开相同的文件。第二件事是在记事本中打开自动换行或下载 Notepad++(我认为每个人都应该拥有的文本编辑器)并确保数据实际上丢失了,而不仅仅是因为它没有使用 Windows 样式而没有显示在屏幕上行尾。

于 2013-08-16T22:54:13.050 回答