2014-09-12 179 views
1

所以,我在做这个代码转换从VB.NET到C#:如何在C#中使用FileOpen(VB.NET)?

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的源代码,所以我可以使用它。

+4

你确定是VB.NET而不是VB6吗? – 2014-09-12 12:04:19

+0

什么是FileOpen()? (和'Space()'?和'LOF()'?和'FileGet()'?和'FileClose()'?和'Split()??)如果这是VB .NET,那么你有一些帮助函数你需要检查和实施,或者移动到一个单独的程序集并按原样引用它们。无论哪种方式,您需要的所有文件操作都在'System.IO'命名空间中。 – David 2014-09-12 12:08:59

+1

@David FileOpen/Space/LOF等都是VB.NET的标准功能(为了与VB6向后兼容;是的,即使是On Error语句仍然可以在VB.NET中使用)。 – sloth 2014-09-12 12:30:41

回答

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方法,但这会使它适用于您。

+0

但是,由于这是关于C#的翻译,因此(手动)转换为C#等价物会更明智一些。 – rskar 2014-09-12 12:39:35

+1

@rskar - 我不同意你的看法,但将它翻译成不需要VisualBasic命名空间的VB.NET代码会更聪明。 – 2014-09-12 12:41:05

+0

谢谢你,我的兄弟,你是最好的答案,谢谢任何人试图帮助我,谢谢你 – QaSe21 2014-09-12 22:39:35

1

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

0

基本上你会用:

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 
1

你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(); 
} 

这是假设filesplit是一个字符,字符串或类似Environment.NewLine