在C#中读取随机访问文件

4

有人知道在C#中是否可以读取随机访问文件吗?

我正在尝试在C#中复制以下函数(来自旧的VB6应用程序)-

Open File For Random Shared As #100 Len = Len(Record)
    Get #100, DM, Record
Close #100

Public DM As Long
Public Record As DMrecord

Public Type DMrecord
column1 As Long
column2 As Integer
column3 As Integer
column4 As Integer
column5 As String * 4
End Type

编辑 -

如下所建议,我已尝试使用VisualBasic DLL,并在FileGetObject行上收到以下错误 -

"Microsoft.VisualBasic.FileSystem.FileGetObject(int, ref object, long)的最佳重载方法存在一些无效参数"

我正在使用的代码是 -

        public class Record 
    {
        public int DMtype;
        public long ecn;


        public Record(int DMtype, long ecn) 
        {
            this.DMtype = DMtype;
            this.ecn = ecn;
        }

        public Record()
        {
        }
    }


string fileName = @"C:\RandomAccess.dat";
        string returnString = string.Empty;
        int row = 1;
        int maxRow = 1000;

        Record aFileRecord = new Record();

        FileSystem.FileOpen(1, fileName, OpenMode.Random, OpenAccess.Read, OpenShare.LockRead);

        while (row < maxRow)
        {
            //Get record 2 1st.>>
            FileSystem.FileGetObject(1, aFileRecord, row);
            returnString += aFileRecord.DMtype.ToString() + "$" + aFileRecord.ecn.ToString();
            row++;
        }

        FileSystem.FileClose(1);

我尝试将“记录”设置为结构体和类,但是遇到了相同的错误。
编辑22/08/13 - 我从未找到问题的根本原因,最终在VB6中将随机访问数据导出为逗号分隔文本文件,然后在SSIS中使用这些文件。

3
你需要使用BinaryReader自己解释数据。可以使用BinaryReader.ReadInt64()读取长整型数据, BinaryReader.ReadInt32()读取整型数据,而字符串将需要逐个读取。请按照我提供的链接中所述进行读取。点击这里开始阅读。 - Matthew Watson
注意:vb6 Long实际上是int32 - John Sobolewski
哎呀,我应该说“你可以使用BinaryReader.ReadInt32()读取的长整型”。 - Matthew Watson
请尝试访问https://dev59.com/CnVC5IYBdhLWcg3whRkw。 - jac
2
只是猜测,object aFileRecord = new Record()FileSystem.FileGetObject(1, ref aFileRecord, row) - jac
1个回答

1

谢谢建议,我现在会查看VisualBasic.dll。 - user1948635
嗯,好像无法正常工作。当我尝试传入一个新的结构体实例(在上面一行中的aFileRecord)时,FileSystem.FileGetObject(1, aFileRecord, 1)这一行会抛出错误。你有什么想法我做错了什么吗? - user1948635
只是补充一下,错误是 - “Microsoft.VisualBasic.FileSystem.FileGetObject(int, ref object, long) 的最佳重载方法匹配有一些无效的参数”。 - user1948635
也许它不喜欢结构体。你可以尝试使用类?(免责声明-我基于文档推荐这些技术,但实际上我自己并没有使用过。) - MarkJ
我尝试了类和结构体,但都收到了相同的错误,请参见问题中包含更新代码的编辑。 - user1948635
1
@user1948635 你忘记放 ref aFileRecord 了。该方法需要一个对象的引用,而不是对象本身。 - ThunderGr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接