2

在 VB.NET 工作一段时间后,我想摆脱 Microsoft.VisualBasic 依赖项。
由于文本文件和字符串操作在这里很容易,我不知道该怎么做。

是否可以在不使用 Microsoft.VisualBasic 命名空间的情况下在 VB.NET 中编写等效代码以及该代码的外观?

Dim fnum As Integer = FreeFile()
FileOpen(fnum, "Setup\myadmin", OpenMode.Random, OpenAccess.ReadWrite, OpenShare.Shared, Len(idstruct))
FilePut(fnum, idstruct, 1) 'structure data to file in record 1
FileClose(fnum)
4

4 回答 4

2

尽管我很同情您删除对Microsoft.VisualBasic命名空间的所有引用的愿望,并且尽管我认为这样做很有价值,但有时它只是不值得麻烦。命名空间确实包含一些有用的工具,没有它就不容易复制。

例如,TextFieldParser浮现在脑海中。它允许您轻松读取 CSV 和固定宽度文件。.NET 框架中没有其他类似的类。那么,为了不引用Microsoft.VisualBasic命名空间而重新发明轮子是否值得?我会争辩说这不值得。

虽然可以重现FileGetFilePut使用FileStreamStreamReader、和类的行为StreamWriter,但可能不值得这么费劲。和方法是专门为向后兼容而提供的,所以如果与旧系统兼容是您的目标,尽管我这么说很痛苦,但使用and是一个合适的解决方案。BinaryReaderBinaryWriterFileGetFilePutFileGetFilePut

但是,其中一些建议取决于数据的类型。例如,如果结构只包含固定宽度的字符串,那么使用StreamReaderandStreamWriterTextFieldParser. BinaryReader或者,如果它只包含整数,那么使用and可能很容易重现BinaryWriter

但是,即使您可以使用其他非仅 VB 的类轻松地重现逻辑,这样做也不会为您带来任何好处。事实上,您的代码会更复杂,并且不会自我记录。当您看到使用FileGetand的代码时FilePut,不仅很容易分辨出正在做什么,而且很明显它是为了向后兼容。如果您用自己的逻辑替换它们,那么如果不对代码添加注释,向后兼容的必要性就不会很明显。

如果您不喜欢看它们,我当然可以理解,那么将它们包装在包装器类中可能是值得的。例如,您可以创建一个具有加载/保存方法的数据访问样式类,该类在内部仅使用FileGetand FilePut。无论如何,这样做将是一个好习惯。这样,如果您选择以不同的格式或不同的数据源(例如数据库)存储数据,您可以在一个类中更改它,而无需重写所有代码。

于 2013-10-08T13:09:48.737 回答
1

我刚刚发现的另一件事是有关 My.Computer.FileSystem 的 MSDN 页面:

http://msdn.microsoft.com/en-us/library/0b485hf7%28v=vs.90%29.aspx

我发现这是从 FilePut 上的 MSDN 页面引用的:

http://msdn.microsoft.com/en-us/library/0s9sa1ab%28v=vs.90%29.aspx

从这样的帖子 我的理解是,无论如何它只是 System.IO 的包装器,但它应该为底层 IO 功能提供“更方便和易于理解”的接口。

于 2013-10-08T12:56:04.513 回答
0

如果您指的是您对 LEN() 函数的使用(这是我能看到的唯一指 Microsoft.VisualBasic 命名空间,除非我遗漏了什么),那么您可以只使用 String.Length 代替。例如 idstruct.Length,假设 idstruct 是一个字符串。

于 2013-10-08T12:27:40.980 回答
0

System.IO.FileStream。方法有点不同,但很简单。

 Dim fs As New FileStream(mUserFile, FileMode.XXX, FileAccess.XXX)

或者:

 Using fs as New FileStream....

 End Using

将改变的主要事情是,与其编写结构,不如将其转换为字节数组(Count 将是数组的长度,在您的示例中偏移 0):

 fs.Write(byt(), lOffset, lCount)

如果有很多遗留代码需要支持,您可以将它们全部包装在一个类中以模拟旧的随机访问文件方法。还有一个BinaryReaderandBinaryWriter如果数据很大但大部分是静态的,你也可以考虑序列化。

于 2013-10-08T12:31:29.800 回答