OR
誰でも自由に記事を投稿・編集できるオープンリファレンス
記事ID:472
区分:プログラム  |  分類:VB  |  最終更新日:2014/06/20
クリエイティブ・コモンズ 表示-継承ライセンス 2.1
【VB】Openステートメント
関連タグ:vba, vb6, ファイル入出力, ステートメント
このエントリーをはてなブックマークに追加      
本文
履歴
編集
閲覧数: 67,242
VB6関連技術まとめ > ステートメント一覧 > 【VB】Openステートメント

指定のファイルを開いて、ファイルへの入出力ができるようにするステートメントです。

ステートメント仕様

構文 Open pathname For mode [Access access] [lock] As [#]filenumber [Len=reclength]
引数
引数 省略 説明

pathname

不可

オープンするファイル名を指定します。

ドライブ名、フォルダ名を含んだフルパスでの指定が可能です。

mode

不可

ファイルをオープンする際のモードを指定します。

省略した場合、自動で Random が設定されます。

キーワード 説明

Append

書き込み(追記)モード

Binary

バイナリモード

Input

読み込みモード

Output

書き込み(上書き)モード

Random

ランダムアクセスモード(既定値)

Access

開くファイルに対する処理を指定します。

省略した場合、モードやファイルの状態により、システムが自動で可能なアクセス方法を設定します。

キーワード 説明

Read

読み込みのみ行う

Write

書き込みのみ行う

Read Write

読み書き両方行う

lock

開くファイルに対する他のプロセスからのアクセス制限を指定します。

省略した場合、Shared が既定値となります。

キーワード 説明

Shared

他プロセスからの読み書きを可とする(既定値)

Lock Read

他プロセスからの読み込みを不可とする

Lock Write

他プロセスからの書き込みを不可とする

Lock Read Write

他プロセスからの読み書きを不可とする

filenumber

不可

1 ~ 511 の範囲で任意のファイル番号を指定します。

reclength

ランダム アクセス ファイルの場合はレコード長を、シーケンシャル ファイルの場合はバッファの容量を、32,767 バイト以下の数値で指定します。

 

このステートメントは引数で指定したファイルを開き、ファイルへの入出力ができるようにするステートメントです。 引数には開くファイル名とファイルを開く際のアクセス モード、ファイル No などを指定します。

 

Open "Sample.txt" For Input As #1

 

As # 節で指定するファイル No は 1 ~ 511 の範囲で任意の番号を指定します。 数字をそのまま指定することもできますが、通常は FreeFile 関数を使用して、使用可能なファイル番号を取得し、その番号を使用します。

 

Dim n As Integer
n = FreeFile
Open "Sample.txt" For Input As #n

 

上記例はシーケンシャル入力モード(読み込みモード)で「Sample.txt」ファイルをオープンしています。


モードには Input, Output, Append, Binary, Random のいずれかのキーワードを指定し、指定されたキーワードによってファイルへのアクセス方法が決定します。 モードは必須項目ですが省略した場合は、ランダム アクセス モード (Random) が自動で設定されます。 なお、ファイルを開く際に指定のファイルが存在しない場合は、モードが Output, Append, Binary, Random の場合は新規にファイルが作成され、モードが Input の場合は、エラーが発生します。

 

【指定のファイルが存在しない場合のモードごとの動作】

モード

ファイルが存在しない

場合の動作

Output

指定ファイル名で

新規にファイルを作成

Append

Binary

Random

Input

エラー

 

また、シーケンシャル入力モード(読み込みモード)およびバイナリ モード、ランダム アクセス モードのいずれかでファイルを開いた場合、ファイルを開いたまま、別のファイル No で同時に同じファイルを開くことができますが、シーケンシャル出力モード(上書きまたは追加書き込みモード)でファイルを開いた場合は、同時に同じファイルを開くことはできません。 一度ファイルを閉じる必要があります。

 

【モード別 同時アクセスの可否】

モード

同時アクセス

Input

Binary

Random

Output

不可

Append

※シーケンシャル出力モード(Output, Append)でファイルを開いた場合は一度ファイルを閉じる必要があります。

 

引数 access は開くファイルに対して行う処理を指定します。 通常、シーケンシャル入出力モードではモード指定で動作が決定する為、この引数は省略しますが、バイナリ モードやランダム アクセス モードで明示的にアクセス方法を示す場合に指定します。 バイナリ モードやランダム アクセス モードでこの引数を省略した場合は、システムが自動で可能なアクセス方法を決定しますが、予期しない動作を防ぐ為にも、これらのモードではアクセス方法を指定しておくことが推奨されます。

 

Open "Sample.txt" For Binary Access Write As #1

※上記例はアクセス方法を「書き込み限定(Write)」のバイナリ モードでファイルを開いています。

 

引数 access に指定できるキーワードは上記【ステートメント仕様】を参照下さい。

 

引数 lock は開くファイルに対する、他のプロセスからのアクセスを制御する場合に指定します。 キーワードにより、他のプロセスからの読み込み禁止、書き込み禁止、読み書き禁止などを指定することができます。 省略した場合は Shared が既定値となり、他のプロセスからのアクセスが可能となります。

 

Open "Sample.txt" For Output Lock Write As #1

※上記例は「他のプロセスからの書き込みを不可(Lock Write)」を指定して上書きモードでファイルを開いています。

 

引数 lock に指定できるキーワードは上記【ステートメント仕様】を参照下さい。

 

引数 Len 節はランダム アクセス モードではレコード長を指定し、シーケンシャル入出力モードではバッファの容量を指定します。 バイナリ モードではこの値は無視されます。 通常、この引数はランダム アクセス モードでファイルを開く際に使用し、それ以外のモードでは省略します。

 

Open "Sample.txt" For Random As #1 Len = Len(MyRecord)

※上記例はレコード長に MyRecord 変数の長さを設定しています。

動作検証

条件 動作結果

読み込みモード(Input)でファイルを開き

ファイルを読み込む場合

※ファイル内容は以下とする

text1
text2
text3

Dim strText As String

Open "Sample.txt" For Input As #1

Do Until EOF(1)
    Input #1, strText
    Debug.Print strText
Loop

Close #1

text1
text2
text3

 

※ファイルの中身が表示される

ファイルが存在しない場合は

エラー

書き込みモード(Output)でファイルを開き

ファイルを書き込む場合

※ファイルは存在しないとする

Open "Sample.txt" For Output As #1

Write #1, "ABCDE"
Write #1, "あいうえお"

Close #1

※新規にファイルが作成され、

以下内容が出力される

(ファイルが存在する場合は

上書きされる)

ABCDE
あいうえお

書き込みモード(Append)でファイルを開き

ファイルを書き込む場合

※元のファイル内容は以下とする

ABCDE
あいうえお

Open "Sample.txt" For Append As #1

Write #1, "CDEFG"
Write #1, "かきくけこ"

Close #1

※ファイル内容は以下になる

(ファイルが存在しない場合は

新規に作成される)

ABCDE
あいうえお
CDEFG
かきくけこ

バイナリ モード(Binary)でファイルを開き

ファイルを書き込む場合

※ファイルの中身は以下とする

12345

Open "Sample.txt" For Binary Access Write As #1

Put #1, , "67890"

Close #1

※ファイル内容が上書きされる

(ファイルが存在しない場合は

新規に作成される)

67890

ランダム アクセス モード(Random)で

ファイルを開き、書き込みをする場合

※ファイルは存在しないとする

Private Type MyType
    No As Integer
    Date As Date
    Text As String * 20
End Type


Dim i As Integer

Dim MyRecode As MyType
Open "Sumple.txt" For Random As #1 Len = Len(MyRecode)
For i = 1 To 3
    MyRecode.No = i
    MyRecode.Date = DateAdd("d", i, Date)
    MyRecode.Text = "メッセージ" & i
    Put #1, i, MyRecode
Next i

Close #1

※新規にファイルが作成され

レコードが3つ記録される

(ファイルが存在する場合は

指定のレコードに上書きする)

1,日時,メッセージ1
2,日時,メッセージ2
3,日時,メッセージ3

(上記は書き込みイメージ)

ランダム アクセス モード(Random)で

ファイルを開き、読み込みをする場合

※上記ファイルの2レコード目を読み込むとする

Private Type MyType
    No As Integer
    Date As Date
    Text As String * 20
End Type


Dim strData As String

Dim MyRecode As MyType

Open "Sample.txt" For Random As #1 Len = Len(MyRecode)
Get #1, 2, MyRecode
strData = MyRecode.No & ":" & _
          Format(MyRecode.Date, "MM/DD") & ":" & _
          MyRecode.Text
Debug.Print strData

Close #1

2:11/12:メッセージ2

関連記事
関連記事はありません。
外部リンク
外部リンクはありません。
- 記事検索 -