【问题标题】:How do I use FileOpen (VB.NET) in C#?如何在 C# 中使用 FileOpen (VB.NET)?
【发布时间】:2014-09-12 12:02:29
【问题描述】:

所以,我正在努力将此代码从 VB.NET 转换为 C#:

    Public Class Form1
    Const filesplit As String = "|split|"
    Dim stub, opt() As String

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        On Error Resume Next
        FileOpen(1, Application.ExecutablePath, OpenMode.Binary, OpenAccess.Read, OpenShare.Shared)
        stub = Space(LOF(1))
        FileGet(1, stub)
        FileClose(1)
        opt = Split(stub, filesplit)

    End Sub
End Class

我使用了一系列在线转换器,但它们并不适合我。

我该怎么做?我正在尝试理解 VB.NET 源代码,以便我可以使用它。

【问题讨论】:

  • 你确定是 VB.NET 而不是 VB6?
  • FileOpen() 是什么? (还有Space()?还有LOF()?还有FileGet()?还有FileClose()?还有Split()?)如果这是VB .NET,那么你有一些辅助函数需要检查和实现或移动到一个单独的程序集并按原样引用它们。无论哪种方式,您需要的所有文件操作都在 System.IO 命名空间中。
  • @David FileOpen/Space/LOF 等都是 VB.NET 的标准函数(为了向后兼容 VB6;是的,即使 On Error 语句在 VB.NET 中仍然有效)。
  • 这必须是 VB.NET 代码,因为 Application.Executable 路径不在 VB6 中。貌似是从VB6移植过来的,一味复制粘贴。

标签: c# .net vb.net vb.net-to-c#


【解决方案1】:

这些方法位于 Microsoft.VisualBasic 命名空间中。

因此,您可以在项目中添加对它的引用,然后使用几乎完全相同的代码,并对所使用的方法进行少量额外限定:

using Microsoft.VisualBasic; //add this statement

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        string filesplit = "|split|";
        string stub;
        string[] opt;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            FileSystem.FileOpen(1, Application.ExecutablePath, OpenMode.Binary, OpenAccess.Read, OpenShare.Shared);
            stub = Strings.Space(Convert.ToInt32(FileSystem.LOF(1)));
            FileSystem.FileGet(1, ref stub);
            FileSystem.FileClose(1);
            opt = Strings.Split(stub, filesplit);
        }
    }
}

但是,您应该真正考虑在您的 VB.NET 和 C# 代码中使用 System.IO 命名空间中的 File.xxx 方法,但这会让它为您工作。

【讨论】:

  • 但是,由于这是关于 C# 的转换,因此(手动)转换为 C# 等效项会更聪明。
  • @rskar - 我不同意你的观点,但将其转换为不需要 VisualBasic 命名空间的 VB.NET 代码会更聪明。
  • 谢谢我的兄弟,你是最好的答案,谢谢任何人尝试帮助我谢谢
【解决方案2】:

使用File.Open。这应该会得到你想要的。

【讨论】:

    【解决方案3】:

    您的 VB 代码实际上是这样做的:

    // The using clause ensures the StreamReader is properly disposed after the closing block.
    using (StreamReader sr = File.OpenText(Application.ExecutablePath))
    {
        stub = sr.ReadToEnd();
        opt = stub.Split(filesplit).ToArray();
    }
    

    这假设文件分割是一个字符、字符串或类似 Environment.NewLine 的东西

    【讨论】:

      【解决方案4】:

      基本上你会使用:

      Dim content = File.ReadAllText("c:\temp\MyTest.txt")
      

      但是使用起来会更正确:

      Dim path As String = "c:\temp\MyTest.txt"
      If File.Exists(path) Then
          Dim content = File.ReadAllText(path)
          Rem do something with content
      End If
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-10
        • 1970-01-01
        • 1970-01-01
        • 2013-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-31
        相关资源
        最近更新 更多