-1

MSDN で明確でないいくつかの VB ネット関数について、いくつかの非常に簡単な質問があります。

  1. fileopen関数 EGを使用する場合

    fileopen(1,Path of file,openmode.binary) 
    

    、開くファイルがテキストファイルの場合、openmode.binary は実際にどのように機能しますか? 各文字はバイナリ形式で使用されていますか?

  2. fileget関数を使用する場合。

    fileget(1,variablename) 
    

    、変数の型はファイルから読み取られるものに依存しますか? variablename が char として宣言されている場合、fileget 関数はファイルから文字を読み取るだけでしょうか?

  3. fileclose関数は単に効率を改善するために使用されてますか? EG 閉じていない場合は、無限ループに似ていますか?

4

2 に答える 2

3

NET Framework にはSystem.IOという名前の名前空間があり、ファイル (テキストまたはバイナリ) を読み書きするためのメソッドがすべて含まれています。

MSDN から取得したこのサンプルは、VB.NET でテキスト ファイルを読み取る方法の例です。

Public Shared Sub Main()
    Try 
        Using sr As New StreamReader("TestFile.txt")
            Dim line As String
            line = sr.ReadToEnd()
            Console.WriteLine(line)
        End Using 
    Catch e As Exception
        Console.WriteLine("The file could not be read:")
        Console.WriteLine(e.Message)
    End Try 
End Sub 

ここでは、fileopen 関数がStreamReaderコンストラクターに置き換えられています。fileget は StreamReader のReadToEnd(またはReadLineまたはReadBlock) メソッドに置き換えられ、ファイルのクローズは、最初の Using によって作成された StreamReader オブジェクトを閉じて破棄する End Using 命令に置き換えられます。

MSDN のこの記事を読むことをお勧めします:一般的な I/O タスク

于 2013-05-25T20:24:03.220 に答える
1
  1. そうではありません、あなたはこれをするべきではありません。テキスト ファイルがある場合は、バイナリ モードではなく、テキスト モードで開く必要があります。バイナリ モードは、バイナリ モードで書き出したファイルを読み込むためのものです。

  2. はい。ただし、最初にデータをファイルに書き込んだ方法に基づいて、データ型を正しく一致させることが期待されます。間違えると、すべての賭けが無効になります。ここには自動化されたものは何もありません。

  3. いいえ、効率を上げるためにファイルを閉じるのではなく、使い終わったので閉じます。ファイルを閉じないと、リソース リークが発生します。アプリケーションが閉じられるまでファイルは閉じられず、オペレーティング システムによって自動的に解放されます。リソースをリークすることは非効率的であると考えることができると思いますが、それはあなたが意図したことではないと思います。無限ループのようなものではありません。アプリは実行され続けますが、ロックされているため、ファイルを他のもので開いたり読み取ったりすることはできません。

しかし、他の人がすでに言ったように、これらの古くて時代遅れの機能を本当にあきらめる必要があります。彼らは、BASIC プログラミング言語の最も初期で最も暗い時代に生まれました。以前このようにする必要がありましたが、ありがたいことに、もう必要ありません。それらが VB.NET に存在する唯一の理由は、古い VB 6 アプリケーションの移植を容易にするためです。たとえそれがあなたが行っていることであっても、移植作業の一部には、System.IO名前空間によって提供される関数への切り替えが含まれる必要があります。それは単に慣用的であることや、最新かつ最高のものをそのためだけに使用することだけではなく、多くの余分な作業と苦痛を省くことでもあります。

于 2013-05-26T09:09:24.760 に答える