■ My.Computer.FileSystem オブジェクトの利用 ■ ■ My.Computer.FileSystem オブジェクト My.Computer.FileSystem オブジェクトには、ドライブ、ファイル、及び、ディレクトリを操作する為 のプロパティとメソッドが用意されて居る。 名 前 空 間:Microsoft.VisualBasic.MyServices ク ラ ス:FileSystemProxy (FileSystem へのアクセスを可能にする)
アセンブリ:Microsoft Visual Basic ランタイム (Microsoft.VisualBasic.dll 内) ■ My.Computer.FileSystem オブジェクトのメンバ プロパティ プロパティ 説明 CurrentDirectory 現在のディレクトリを取得する。 Drives ドライブに関する情報を取得する。 SpecialDirectories My.Computer.FileSystem.SpecialDirectories オブジェクトを返す。此のオブジ ェクトは、Temp 又は MyDocuments 等の特殊なディレクトリにアクセスする為 に使用出来る。 メソッド メソッド 説明 CombinePath 適切な形式で連結されたパスをString として返す。 CopyDirectory ディレクトリをコピーする。 CopyFile ファイルをコピーする。 CreateDirectory ディレクトリを作成する。 DeleteDirectory ディレクトリを削除する。 DeleteFile ファイルを削除する。 DirectoryExists ディレクトリが存在するか何うかを示すBoolean を返す。 FileExists ファイルが存在するか何うかを示すBoolean を返す。 FindInFiles 指定されたテキストが含まれるファイル名を読み取り専用の文字列コレ クションとして返す。 GetDirectories ディレクトリ内に有るサブディレクトリのパス名をString コレクション として返す。 GetDirectoryInfo 指定されたパスのDirectoryInfo オブジェクトを返す。 GetDriveInfo 指定されたパスのDriveInfo オブジェクトを返す。 GetFileInfo 指定されたパスのFileInfo オブジェクトを返す。 GetFiles ディレクトリ内に有るファイルの名前を読み取り専用のString コレクシ ョンとして返す。 GetParentPath 指定されたパスの親の絶対パスをString として返す。 MoveDirectory ディレクトリを移動する。
フ
ファ
ァイ
イル
ル操
操作
作
MoveFile ファイルを移動する。 OpenTextFieldParser TextFieldParser を開く。 OpenTextFileReader TextReader を開く。 OpenTextFileWriter TextWriter を開く。 ReadAllBytes バイナリファイルの内容を読み取る。 ReadAllText テキストファイルの内容を読み取る。 RenameDirectory ディレクトリの名前を変更する。 RenameFile ファイルの名前を変更する。 WriteAllBytes バイナリファイルに書き込む。 WriteAllText テキストファイルに書き込む。 処理手順 My.Computer.FileSystem オブジェクトを使ったタスクの例を次の表に示す。 目的 参照項目 テキストファイルから読み込む。 Visual Basic でテキストファイルを読み取る 区切り記号付きのテキストファイルから読み 込む。 Visual Basic でコンマ区切りのテキストファイルを 読み取る 固定幅のテキストファイルから読み込む。 Visual Basic で固定幅のテキストファイルを読み取 る 様々な形式のテキストファイルから読み込む。 Visual Basic で複数の書式を持つテキストファイル を読み取る バイナリファイルから読み取る。 Visual Basic でバイナリファイルを読み取る MyDocuments ディレクトリに格納されたテキ ストファイルから読み取る。 My Documents の既存のテキストファイルを読み取 る(Visual Basic) StreamReader でテキストファイルから読み 取る。 StreamReader を使用してファイルからテキストを 読み取る(Visual Basic) テキストファイルに書き込む。 Visual Basic でテキストをファイルに書き込む テキストファイルに追記する。 Visual Basic でテキストファイルに追記する バイナリファイルに書き込む。 Visual Basic でバイナリファイルに書き込む MyDocuments ディレクトリに格納されたテキ ストファイルに書き込む。
Visual Basic で My Documents ディレクトリのファ イルにテキストを書き込む
StreamWriter でテキストファイルに書き込 む。
Visual Basic で StreamWriter を使用してテキストを ファイルに書き込む 特定のパターンでファイルをコピーする Visual Basic で特定のパターンを持つファイルをデ ィレクトリにコピーする ファイルを同じディレクトリにコピーする。 Visual Basic でファイルのコピーを同じディレクト リに作成する ファイルを異なるディレクトリにコピーする。 Visual Basic でファイルのコピーを別のディレクト リに作成する ファイルを作成する。 Visual Basic でファイルを作成する ファイルを削除する。 Visual Basic でファイルを削除する ディレクトリ内のすべてのファイルを削除す る。 Visual Basic でディレクトリ内の総てのファイルを 削除する 特定のパターンでファイルを検索する Visual Basic で特定のパターンに一致するファイル を検索する
ファイルを移動する。 Visual Basic でファイルを移動する 複数のファイルを移動する。 Visual Basic でファイルのコレクションを移動する ファイルの名前を変更する。 Visual Basic でファイルの名前を変更する ディレクトリの名前を変更する。 Visual Basic でディレクトリの名前を変更する あるディレクトリを別のディレクトリにコピ ーする。 Visual Basic でディレクトリを別のディレクトリに コピーする ディレクトリを作成する。 Visual Basic でディレクトリを作成する ディレクトリを削除する。 Visual Basic でディレクトリを削除する 特定のパターンでサブディレクトリを検索す る。 Visual Basic で特定のパターンに一致するサブディ レクトリを検索する ディレクトリから複数のファイルを取得する。 Visual Basic でディレクトリに有るファイルのコレ クションを取得する ディレクトリ内のファイル数を調べる。 ディレクトリに含まれているファイルの数を確認す る ディレクトリを移動する。 Visual Basic でディレクトリを移動する ディレクトリの内容を移動する。 Visual Basic でディレクトリの内容を移動する MyDocuments ディレクトリの内容を読み込 む。
Visual Basic で My Documents ディレクトリの内容 を取得する ファイル パスを解析する。 Visual Basic でファイル パスを解析する ■ Visual Basic でテキストファイルを読み取る My.Computer.FileSystem オブジェクトの ReadAllText メソッドを使用すると、テキストファイルを読 み取る事が出来る。ファイルの内容がASCII や UTF-8 等のエンコーディングを使用して居る場合、フ ァイルエンコーディングを指定出来る。 読み取るファイルで拡張文字が使用されて居る場合、ファイルエンコーディングを指定する必要が有る。 テキストファイルを読み取るには My.Computer.FileSystem オブジェクトの ReadAllText メソッドを使用して、ファイルのパスを指定し、 テキストファイルの内容を文字列に読み取る。次の例は、test.txt の内容を文字列に読み取り、メッセ ージボックスに表示する。 Visual Basic Dim fileReader As String
fileReader = My.Computer.FileSystem.ReadAllText("C:¥test.txt") MsgBox(fileReader) エンコードされて居るテキストファイルを読み取るには My.Computer.FileSytem オブジェクトの ReadAllText メソッドを使用して、ファイルのパスとファイ ルエンコードの種類を指定し、テキストファイルの内容を文字列に読み取る。次の例は、UTF32 ファ イルで有るtest.txt の内容を文字列に読み取り、メッセージボックスに表示する。 Visual Basic Dim fileReader As String
fileReader = My.Computer.FileSystem.ReadAllText("C:¥test.txt", _ System.Text.Encoding.UTF32)
堅牢性の高いプログラム 次の条件を満たす場合は、例外が発生する可能性が有る。 ・パスが無効で有る場合。1) 長さが 0 の文字列で有る、2) 空白丈が含まれて居る、3) 無効な文字が含 まれて居る、4) デバイスパスで有る、の孰れかの理由が考えられる(ArgumentException)。 ・パスがNothing で有る為、有効でない場合(ArgumentNullException)。 ・ファイルが存在しない場合(FileNotFoundException)。 ・他のプロセスがファイルを使用して居るか、又は、I/O エラーが発生した場合(IOException)。 ・パスがシステムで定義されて居る最大長を超えて居る場合(PathTooLongException)。 ・パス内のファイル名やディレクトリ名にコロン( : )が含まれて居るか、又は、形式が無効で有る場 合(NotSupportedException)。 ・文字列をバッファに書き込む為の充分なメモリが無い場合(OutOfMemoryException)。 ・ユーザーがパスを参照するのに必要なアクセス許可が無い場合(SecurityException)。 ファイル名からファイルの内容を判断しては成らない。例えば、Form1.vb と謂うファイルは Visual Basic のソースファイルではない可能性も有る。 アプリケーションでデータを使用する前に、入力を総て検証して欲しい。ファイルの内容が予想通りで ない事が有り、ファイルの内容を読み取るメソッドが失敗する可能性が有る。 ■ Visual Basic でコンマ区切りのテキストファイルを読み取る TextFieldParser オブジェクトを使用すると、ログ等の構造化されたテキストファイルを簡単、且つ、 効率的に解析出来る。区切り記号が使用されたファイルと固定幅のテキストフィールドを持つファイル の孰れで有るかは、TextFieldType プロパティで定義する。 コンマ区切りのテキストファイルを解析するには
1.新しいTextFieldParser を作成する。次のコードは、MyReader と謂う名前の TextFieldParser を 作成し、test.txt ファイルを開く。
Visual Basic Using MyReader As New _
Microsoft.VisualBasic.FileIO.TextFieldParser ("C:¥TestFolder¥test.txt")
2.TextField の型と区切り記号を定義する。次のコードは、TextFieldType プロパティを Delimited と定義し、区切り記号を( , )と定義する。 Visual Basic MyReader.TextFieldType = FileIO.FieldType.Delimited MyReader.SetDelimiters(",") 3.ファイル内の各フィールドをループする。破損して居る行が有る場合は、エラーを報告し、解析を 続ける。次のコードは、ファイルをループし、各フィールドを順番に表示して、書式に誤りの有る フィールドを報告する。 Visual Basic Dim currentRow As String()
While Not MyReader.EndOfData Try
Dim currentField As String
For Each currentField In currentRow MsgBox(currentField)
Next Catch ex As _
Microsoft.VisualBasic.FileIO.MalformedLineException
MsgBox("Line " & ex.Message & "is not valid and will be skipped.") End Try
4.While ブロックと Using ブロックを End While と End Using で閉じる。 Visual Basic End While End Using 使用例 此の例では、test.txt ファイルを読み取る。 Visual Basic Using MyReader As New _
Microsoft.VisualBasic.FileIO.TextFieldParser("C:¥testfile.txt") MyReader.TextFieldType = FileIO.FieldType.Delimited MyReader.SetDelimiters(",")
Dim currentRow As String() While Not MyReader.EndOfData Try
currentRow = MyReader.ReadFields() Dim currentField As String
For Each currentField In currentRow MsgBox(currentField)
Next
Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException MsgBox("Line " & ex.Message & "is not valid and will be skipped.") End Try End While End Using 堅牢性の高いプログラム 次の条件を満たす場合は、例外が発生する可能性が有る。 ・指定の書式を使用して行を解析出来ない場合(MalformedLineException)。例外メッセージは、例外 が発生した行を表し、TextFieldParser.ErrorLine プロパティには、行に含まれて居るテキストが代 入される。 ・指定のファイルが存在しない場合(FileNotFoundException)。 ・部分信頼の状況で、ファイルにアクセスする為の充分なアクセス許可がユーザーにない場合 (SecurityException)。 ・パスが長過ぎる場合(PathTooLongException) ・ ユ ー ザ ー が フ ァ イ ル に ア ク セ ス す る の に 必 要 な ア ク セ ス 許 可 が 無 い 場 合 (UnauthorizedAccessException)。
■ Visual Basic で固定幅のテキストファイルを読み取る TextFieldParser オブジェクトを使用すると、ログ等の構造化されたテキストファイルを簡単、且つ、 効率的に解析出来る。 区切り記号が使用されたファイルと固定幅のテキストフィールドを持つファイルの孰れで有るかは、 TextFieldType プロパティで定義する。固定幅のファイル内で可変幅のフィールドを指定するには、フ ィールド幅を-1 と仕て定義する。 固定幅のテキストファイルを解析するには
1.新しいTextFieldParser を作成する。次のコードは、Reader と謂う名前の TextFieldParser を作 成し、test.log ファイルを開く。
Visual Basic Using Reader As New _
Microsoft.VisualBasic.FileIO.TextFieldParser ("C:¥TestFolder¥test.log") 2.TextFieldType プロパティを FixedWidth と仕て定義し、幅と形式を定義する。次のコードは、テ キストの列を定義する。最初は幅が5 文字、其の次は 10、其の次は 11、其の次は可変幅で有る。 Visual Basic Reader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.FixedWidth Reader.SetFieldWidths(5, 10, 11, -1) 3.ファイル内の各フィールドをループする。破損して居る行が有る場合は、エラーを報告し、解析を 続ける。 Visual Basic Dim currentRow As String()
While Not Reader.EndOfData Try
currentRow = Reader.ReadFields() Dim currentField As String
For Each currentField In currentRow MsgBox(currentField)
Next
Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException MsgBox("Line " & ex.Message & "is not valid and will be skipped.") End Try
4.While ブロックと Using ブロックを End While と End Using で閉じる。 Visual Basic End While End Using 使用例 此の例では、test.log ファイルを読み取る。 Visual Basic Using Reader As New _
Microsoft.VisualBasic.FileIO.TextFieldParser("C:¥TestFolder¥test.log") Reader.TextFieldType = _
Microsoft.VisualBasic.FileIO.FieldType.FixedWidth Reader.SetFieldWidths(5, 10, 11, -1)
Dim currentRow As String() While Not Reader.EndOfData Try
currentRow = Reader.ReadFields() Dim currentField As String
For Each currentField In currentRow MsgBox(currentField)
Next
Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException MsgBox("Line " & ex.Message & "is not valid and will be skipped.") End Try End While End Using 堅牢性の高いプログラム 次の条件を満たす場合は、例外が発生する可能性が有る。 ・指定の書式を使用して行を解析出来ない場合(MalformedLineException)。例外メッセージは、例外 が発生した行を表し、TextFieldParser.ErrorLine プロパティには、行に含まれて居るテキストが代 入される。 ・指定のファイルが存在しない場合(FileNotFoundException)。 ・部分信頼の状況で、ファイルにアクセスする為の充分なアクセス許可がユーザーに無い場合 (SecurityException). ・パスが長過ぎる場合(PathTooLongException) ・ ユ ー ザ ー が フ ァ イ ル に ア ク セ ス す る の に 必 要 な ア ク セ ス 許 可 が 無 い 場 合 (UnauthorizedAccessException)。 ■ Visual Basic で複数の書式を持つテキストファイルを読み取る TextFieldParser オブジェクトを使用すると、ログ等の構造化されたテキストファイルを簡単、且つ、 効率的に解析出来る。PeekChars メソッドを使用して、ファイルを解析する時に各行の書式を判断する 事に依り、複数の書式を持つファイルを処理出来る。 複数の書式を持つテキストファイルを解析するには 1.目的の書式と、エラーが報告される時に使用する書式を定義する Visual Basic
Dim StdFormat As Integer()= {5,10,11,-1} Dim ErrorFormat As Integer() = {5,5,-1}
2.幅と書式を指定して、新しいTextFieldParser オブジェクトを作成する。 Visual Basic
Using MyReader As New _
Microsoft.VisualBasic.FileIO.TextFieldParser("C:¥testfile.txt") MyReader.TextFieldType = FileIO.FieldType.FixedWidth
3.各行をループし、読み取り前に書式を調べる。 Visual Basic Dim CurrentRow As String()
While Not MyReader.EndOfData Try
Dim RowType As String = MyReader.PeekChars(3) If String.Compare(RowType, "Err") = 0 Then
' If this line describes an error, the format of the row will be different. MyReader.SetFieldWidths(ErrorFormat)
CurrentRow = MyReader.ReadFields MyReader.SetFieldWidths(StdFormat) Else
'Otherwise parse the fields normally CurrentRow = MyReader.ReadFields
For Each newString As String In CurrentRow My.Computer.FileSystem.WriteAllText _ ("newFile.txt", newString, True)
Next End If
4.エラーをコンソールに書き込む。
Visual Basic
Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException MsgBox("Line " & ex.Message & " is invalid.")
End Try End While End Using 使用例 此の例では、testfile.txt ファイルを読み取る。 Visual Basic Dim StdFormat As Integer() = {5, 10, 11, -1}
Dim ErrorFormat As Integer() = {5, 5, -1} Using MyReader As New _
Microsoft.VisualBasic.FileIO.TextFieldParser("C:¥testfile.txt") MyReader.TextFieldType = FileIO.FieldType.FixedWidth MyReader.FieldWidths = StdFormat
Dim CurrentRow As String()
While Not MyReader.EndOfData Try
Dim RowType As String = MyReader.PeekChars(3) If String.Compare(RowType, "Err") = 0 Then
' If this line describes an error, the format of the row will be different. MyReader.SetFieldWidths(ErrorFormat)
CurrentRow = MyReader.ReadFields MyReader.SetFieldWidths(StdFormat) Else
' Otherwise parse the fields normally CurrentRow = MyReader.ReadFields
My.Computer.FileSystem.WriteAllText("newFile.txt", newString, True) Next
End If
Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException MsgBox("Line " & ex.Message & " is invalid. Skipping")
End Try End While End Using 堅牢性の高いプログラム 次の条件を満たす場合は、例外が発生する可能性が有る。 ・指定の書式を使用して行を解析出来ない場合(MalformedLineException)。例外メッセージは、例外 が発生した行を表し、TextFieldParser.ErrorLine プロパティには、行に含まれて居るテキストが代 入される。 ・指定のファイルが存在しない場合(FileNotFoundException)。 ・部分信頼の状況で、ファイルにアクセスする為の充分なアクセス許可がユーザーに無い場合。 (SecurityException). ・パスが長過ぎる場合(PathTooLongException) ・ ユ ー ザ ー が フ ァ イ ル に ア ク セ ス す る の に 必 要 な ア ク セ ス 許 可 が 無 い 場 合 (UnauthorizedAccessException)。 ■ Visual Basic でバイナリファイルを読み取る My.Computer.FileSystem オブジェクトには、バイナリファイルを読み取る為の ReadAllBytes メソッ ドが用意されて居る。 バイナリファイルを読み取るには ReadAllBytes メソッドを使用する。此のメソッドは、ファイルの内容をバイト配列として返す。此の 例では、C:/Documents and Settings/selfportrait.jpg ファイルを読み取る。
Visual Basic
My.Computer.FileSystem.ReadAllBytes ("C:/Documents and Settings/selfportrait.jpg") 堅牢性の高いプログラム 次の条件を満たす場合は、例外がスローされる可能性が有る。 ・パスが無効で有る場合。1) 長さが 0 の文字列で有る、2) 空白丈が含まれて居る、3) 無効な文字が含 まれて居る、4) デバイスパスで有る、の孰れかの理由が考えられる(ArgumentException) ・パスがNothing で有る為、有効でない場合(ArgumentNullException) ・ファイルが存在しない場合(FileNotFoundException) ・他のプロセスがファイルを使用して居るか、又は、I/O エラーが発生した場合(IOException) ・パスがシステムで定義されて居る最大長を超えて居る場合(PathTooLongException) ・パス内のファイル名やディレクトリ名にコロン( : )が含まれて居るか、又は、形式が無効で有る場 合(NotSupportedException) ・文字列をバッファに書き込む為の充分なメモリが無い場合(OutOfMemoryException) ・ユーザーがパスを参照するのに必要なアクセス許可が無い場合(SecurityException) ファイル名からファイルの内容を判断しては成らない。例えば、Form1.vb と謂うファイルが Visual Basic のソースファイルではない可能性も有る。
アプリケーションでデータを使用する前に、入力を総て検証して欲しい。ファイルの内容が予想通りで ない事が有り、ファイルの内容を読み取るメソッドが失敗する可能性が有る。
■ My Documents の既存のテキストファイルを読み取る(Visual Basic)
次のコード例は、My Documents フォルダのテキストファイルの内容を単一のファイルに読み取る。 使用例
Visual Basic
Dim filePaths As System.Collections.ObjectModel.ReadOnlyCollection(Of String) Dim allText As String
Try
filePaths = My.Computer.FileSystem.GetFiles _
(My.Computer.FileSystem.SpecialDirectories.MyDocuments) For Each file As String In filePaths
allText = My.Computer.FileSystem.ReadAllText(file)
My.Computer.FileSystem.WriteAllText("bigfile.txt", allText, True) Next
Catch fileException As Exception Throw fileException
End Try
堅牢性の高いプログラム
読み取る対象のファイルはテキストファイルで有る事が必要で有る。
OpenFileDialog コンポーネント(Windows フォーム)、及び、SaveFileDialog コンポーネント(Windows フォーム)を使用すると、アクセス許可関連のランタイムエラーの可能性を減らす事が出来る。 ファイル名からファイルの内容を判断しては成らない。例えば、Form1.vb と謂うファイルは Visual Basic のソースファイルではない可能性も有る。 アプリケーションでデータを使用する前に、入力を総て検証して欲しい。ファイルの内容が予想通りで ない事が有り、ファイルの内容を読み取るメソッドが失敗する可能性が有る。 セキュリティ ファイルを読み取るには、アセンブリに対して FileIOPermission クラスで特権レベルが許可されて居 る必要が有る。部分的に信頼されて居るコンテキストでプロセスを実行して居る場合は、特権不足の為 例外がスローされる事が有る。詳細に付いては、「コードアクセスセキュリティの基礎」を参照され度 い。亦、ユーザーは、ファイルに対するアクセスも必要で有る。詳細に付いては、「アクセス制御リス ト (ACL)」を参照され度い。
■ StreamReader を使用してファイルからテキストを読み取る(Visual Basic)
My.Computer.FileSystem オブジェクトには、TextReader 及び TextWriter を開く為のメソッドが有る。 OpenTextFileWriter メソッドと OpenTextFileReader メソッドで有る。此等は高度なメソッドで、[総 ての候補] タブを選択しないと IntelliSense で表示されない。
テキストリーダーを使用してファイルから行を読み取るには
謂う名前のファイルを開き、1 行を読み取って、其の行をメッセージボックスに表示する。 Visual Basic
Dim fileReader As System.IO.StreamReader
fileReader = My.Computer.FileSystem.OpenTextFileReader("C:¥¥testfile.txt") Dim stringReader As String
stringReader = fileReader.ReadLine()
MsgBox("The first line of the file is " & stringReader) 堅牢性の高いプログラム 読み取るファイルはテキストファイルで有る必要が有る。 ファイル名からファイルの内容を判断しては成らない。例えば、Form1.vb と謂うファイルが Visual Basic のソースファイルではない可能性も有る。 アプリケーションでデータを使用する前に、入力を総て検証して欲しい。ファイルの内容が予想通りで ない事が有り、ファイルの内容を読み取るメソッドが失敗する可能性が有る。 セキュリティ ファイルを読み取るには、アセンブリに対して FileIOPermission クラスで特権レベルが許可されて居 る必要が有る。部分的に信頼されて居るコンテキストでプロセスを実行して居る場合は、特権不足の為 例外がスローされる事が有る。詳細に付いては、「コードアクセスセキュリティの基礎」を参照され度 い。ユーザーも、ファイルに対するアクセス権を必要とする。詳細に付いては、「アクセス制御リスト (ACL)」を参照され度い。 ■ Visual Basic でテキストをファイルに書き込む My.Computer.FileSystem.WriteAllText メソッドを使用すると、テキストをファイルに書き込む事が出 来る。指定したファイルが存在しない場合は、新たに作成される。 テキストをファイルに書き込むには WriteAllText メソッドを使用して、ファイルと書き込むテキストを指定し、テキストをファイルに書き 込む。此の例では、"This is new text." と謂う行を test.txt と謂う名前のファイルに書き込む。ファイ ルに既存のテキストが有る場合は、此の行を追加する。
Visual Basic
My.Computer.FileSystem.WriteAllText("C:¥TestFolder1¥test.txt", _ "This is new text to be added.",True)
複数の文字列をファイルに書き込むには
文字列コレクションに対し反復処理を行う。WriteAllText メソッドを使用して、テキストをファイルに 書き込む。其の際、対象のファイルと追加する文字列を指定し、append を rue に設定する。
此の例では、Documents and Settings ディレクトリに有るファイルの名前を FileList.txt に書き込む。 其の際、夫々れの間に復帰を挿入して、読み易く成る様にする。
Visual Basic For Each foundFile As String In _
My.Computer.FileSystem.GetFiles("C:¥Documents and Settings") foundFile = foundFile & vbCrLf
My.Computer.FileSystem.WriteAllText _
("C:¥Documents and Settings¥FileList.txt", foundFile, True) Next 堅牢性の高いプログラム 次の条件を満たす場合は、例外が発生する可能性が有る。 ・パスが無効で有る。1) 長さが 0 の文字列で有る、2) 空白丈が含まれて居る、3) 無効な文字が含まれ て 居 る 、4) デバイスパスで有る (¥¥.¥ で開始されて居る )、の孰れかの理由が考えられる (ArgumentException)。 ・パスがNothing で有る為、有効でない (ArgumentNullException)。
・File は存在しないパスを指して居る(FileNotFoundException 又は DirectoryNotFoundException)。 ・他のプロセスがファイルを使用して居るか、又は、I/O エラーが発生した(IOException)。 ・パスがシステムで定義されて居る最大長を超えて居る(PathTooLongException)。 ・パス内のファイル名やディレクトリ名にコロン( : )が含まれて居るか、又は、形式が無効で有る (NotSupportedException)。 ・ユーザーがパスを参照するのに必要なアクセス許可が無い(SecurityException)。 ・ディスクの空き領域が無く、WriteAllText の呼び出しが失敗した(IOException)。 部分的に信頼されて居るコンテキストでプロセスを実行して居る場合は、特権不足の為、例外がスロー される事が有る。詳細に付いては、「コードアクセスセキュリティの基礎」を参照され度い。 ■ Visual Basic でテキストファイルに追記する
My.Computer.FileSystem.WriteAllText メソッドを使用して、append パラメータに True を指定する と、テキストファイルに追記出来る。
テキストファイルに追記するには
WriteAllText メソッドを使用して、対象のファイルと追記する文字列を指定し、append パラメータを True に設定する。
次の例では、文字列 "This is a test string." を Testfile.txt と謂う名前のファイルに書き込む。 Visual Basic
Dim inputString As String = "This is a test string."
My.Computer.FileSystem.WriteAllText ("C://testfile.txt", inputString, True) 堅牢性の高いプログラム 次の条件を満たす場合は、例外が発生する可能性が有る。 ・パスが無効で有る。1) 長さが 0 の文字列で有る、2) 空白丈が含まれて居る、3) 無効な文字が含まれ て 居 る 、4) デバイスパスで有 る( ¥¥.¥ で開始されて 居る)、の孰 れかの理 由が考えられ る (ArgumentException)。 ・パスがNothing で有る為、有効でない(ArgumentNullException)。
・File は存在しないパスを指して居る(FileNotFoundException か DirectoryNotFoundException)。 ・他のプロセスがファイルを使用して居るか、又は、I/O エラーが発生した(IOException)。
・パス内のファイル名やディレクトリ名にコロン( : )が含まれて居るか、又は、形式が無効で有る (NotSupportedException)。 ・ユーザーがパスを参照するのに必要なアクセス許可が無い(SecurityException)。 ■ Visual Basic でバイナリファイルに書き込む My.Computer.FileSystem.WriteAllBytes メソッドはバイナリファイルにデータを書き込む。append パラメータがTrue の場合は、ファイルにデータを追加する。其の他の場合は、ファイルのデータを上 書きする。 指定したパス(ファイル名以外)が有効でない場合は、DirectoryNotFoundException 例外がスローさ れる。パスが有効でファイルが存在しない場合は、ファイルが作成される。 バイナリファイルに書き込むには WriteAllBytes メソッドを使用し、ファイルのパスと名前、及び、書き込むバイト数を指定する。此の 例では、データ配列CustomerData を、CollectedData.dat と謂う名前のファイルに追加する。 Visual Basic My.Computer.FileSystem.WriteAllBytes _
("C:¥MyDocuments¥CustomerData", CustomerData, True) 堅牢性の高いプログラム
例外を引き起こす可能性の有る状態を次に示す。
・パスが無効で有る。1) 長さが 0 の文字列で有る、2) 空白丈が含まれて居る、3) 無効な文字が含まれ て居る、の孰れかの理由が考えられる(ArgumentException)。
・パスがNothing で有る為、有効でない(ArgumentNullException)。
・File は存在しないパスを指して居る(FileNotFoundException か DirectoryNotFoundException)。 ・他のプロセスがファイルを使用して居るか、又は、I/O エラーが発生した(IOException)。
・パスがシステムで定義されて居る最大長を超えて居る(PathTooLongException)。
・パス内のファイル名やディレクトリ名にコロン( : )が含まれて居るか、又は、形式が無効で有る (NotSupportedException)。
・ユーザーがパスを参照するのに必要なアクセス許可が無い(SecurityException)。 ■ Visual Basic で My Documents ディレクトリのファイルにテキストを書き込む
My.Computer.FileSystem.SpecialDirectories オブジェクトを使用すると、MyDocuments ディレクト リ等の特別なディレクトリにアクセス出来る。 My Documents ディレクトリに新しいテキストファイルを書き込むには 1.My.Computer.FileSystem.SpecialDirectories.MyDocuments プロパティを使用してパスを指定す る。 Visual Basic Dim filePath As String
filePath = System.IO.Path.Combine( _
2.WriteAllText メソッドを使用して、指定のファイルにテキストを書き込む。 Visual Basic
My.Computer.FileSystem.WriteAllText(filePath, "some text", True) 使用例
Visual Basic Try
Dim filePath As String
filePath = System.IO.Path.Combine( _
My.Computer.FileSystem.SpecialDirectories.MyDocuments, "test.txt") My.Computer.FileSystem.WriteAllText(filePath, "some text", False) Catch fileException As Exception
Throw fileException End Try
堅牢性の高いプログラム
此のコードでは、ファイルにテキストを書き込む時に生じる可能性の有る総ての例外を再スローして居 る。OpenFileDialog コンポーネント、及び、SaveFileDialog コンポーネント等の Windows フォーム コントロールを使用すると、例外の可能性を減らす事が出来る。有効なファイル名而巳をユーザーが選 択出来る様に成って居るからで有る。但し、此等のコントロールを使用しても、完璧とは限らない。ユ ーザーがファイルを選択してから、コードが実行される迄の間に、ファイルシステムが変更される可能 性が有る。従って、ファイルを操作する時には、例外処理は粗必須で有る。 セキュリティ 部分的に信頼されて居るコンテキストでプロセスを実行して居る場合は、特権不足の為、例外がスロー される事が有る。詳細に付いては、「コードアクセスセキュリティの基礎」を参照され度い。 此の例では新しいファイルを作成する。アプリケーションがファイルを作成する必要が有る場合は、フ ォルダの作成のアクセス許可が必要に成る。アクセス許可は、アクセス制御リストを使用して設定する。 ファイルが既に存在する場合、アプリケーションに必要なのは書き込みのアクセス許可丈で有る。可能 な場合は、フォルダに対する作成の権限を付与するのではなく、配置時にファイルを作成し、1 つのフ ァイルに対する読み取りの権限丈を付与する方が安全で有る。亦、ルートフォルダやProgram Files フ ォルダにデータを書き込むよりも、ユーザーフォルダに書き込む方が安全で有る。詳細に付いては、「ア クセス制御リスト (ACL)」を参照され度い。
■ Visual Basic で StreamWriter を使用してテキストをファイルに書き込む
此の例では、My.Computer.FileSystem.OpenTextFileWriter メソッドを使用して StreamWriter オブ ジェクトを開き、StreamWriter クラスの WriteLine メソッドを使用して、テキストファイルに文字列 を書き込む。
使用例
Visual Basic Dim file As System.IO.StreamWriter
file = My.Computer.FileSystem.OpenTextFileWriter("c:¥test.txt", True) file.WriteLine("Here is the first string.")
堅牢性の高いプログラム 次の条件を満たす場合は、例外が発生する可能性が有る。 ・ファイルが存在する物の、読み取り専用の場合(IOException) ・ディスクの空き領域が無い場合(IOException) ・パスが長過ぎる場合(PathTooLongException) セキュリティ 次のコード例では、ファイルが存在しない場合は新規にファイルを作成する。アプリケーションでファ イルを作成する必要が有る場合、其のアプリケーションにはフォルダに対する Create アクセスが必要 で有る。ファイルが既に存在する場合、アプリケーションに必要なのは、より低い権限で有るWrite ア クセス丈で有る。フォルダに対して Create アクセスを許可するのではなく、可能な限りアプリケーシ ョンの配置時にファイルを作成して置き、1 つのファイルに対して而巳 Read アクセスを許可する方が 安全で有る。 ■ Visual Basic で特定のパターンを持つファイルをディレクトリにコピーする My.Computer.FileSystem.GetFiles メソッドは、ファイルのパス名を表す文字列の読み取り専用のコレ クションを返す。wildCards パラメータを使用して、特定のパターンを指定出来る。 一致するファイルが見付からなかった場合は、空のコレクションが戻る。 My.Computer.FileSystem.CopyFile メソッドを使用して、ファイルをディレクトリにコピー出来る。 特定のパターンを持つファイルをディレクトリにコピーするには 1.GetFiles メソッドを使用してファイルのリストを取得する。此の例では、指定のディレクトリに有 る、総ての .rtf ファイルを取得する。 Visual Basic
For Each foundFile As String In My.Computer.FileSystem.GetFiles( _ My.Computer.FileSystem.SpecialDirectories.MyDocuments, _ FileIO.SearchOption.SearchTopLevelOnly, "*.rtf")
2.CopyFile メソッドを使用してファイルをコピーする。此の例では、testdirectory と謂う名前のデ ィレクトリにファイルをコピーする。
Visual Basic
My.Computer.FileSystem.CopyFile(foundFile, "C:¥testdirectory¥" & foundFile) 3.For ステートメントを Next ステートネントで閉じる。 Visual Basic Next 使用例 次の例は、上記のスニペットを完全な形で示した物で有る。指定したディレクトリの総ての .rtf ファイ ルをtestdirectory と謂う名前のディレクトリにコピーする。
Visual Basic
For Each foundFile As String In My.Computer.FileSystem.GetFiles( _ My.Computer.FileSystem.SpecialDirectories.MyDocuments, _ FileIO.SearchOption.SearchTopLevelOnly, "*.rtf")
My.Computer.FileSystem.CopyFile(foundFile, "C:¥testdirectory¥" & foundFile) Next セキュリティ 次の条件を満たす場合は、例外が発生する可能性が有る。 ・パスが無効で有る。1) 長さが 0 の文字列で有る、2) 空白丈が含まれて居る、3) 無効な文字が含まれ て 居 る 、4) デバイスパスで有 る(¥¥.¥ で開始されて 居る)、の孰 れかの理 由が考えられ る (ArgumentException)。 ・パスがNothing で有る為、有効でない(ArgumentNullException)。 ・ディレクトリが存在しない(DirectoryNotFoundException)。 ・ディレクトリが既存のファイルを指して居る(IOException)。 ・パスがシステムで定義されて居る最大長を超えて居る(PathTooLongException)。 ・パス内のファイル名やディレクトリ名にコロン( : )が含まれて居るか、又は、形式が無効で有る (NotSupportedException)。 ・ユーザーがパスを参照するのに必要なアクセス許可が無い(SecurityException)。ユーザーに必要な アクセス許可が無い (UnauthorizedAccessException)。 ■ Visual Basic でファイルのコピーを同じディレクトリに作成する My.Computer.FileSystem.CopyFile メソッドを使用すると、ファイルをコピー出来る。其のパラメータ を使用して、既存のファイルを上書きしたり、ファイルの名前を変更したり、操作の進行状況を表示し たり、ユーザーが操作をキャンセル出来る様にしたり出来る。 ファイルのコピーを同じフォルダに作成するには CopyFile メソッドを使用する。其の際、対象のファイルと場所を指定する。次の例では、test.txt のコ ピーをtest2.txt と謂う名前で作成する。 Visual Basic My.Computer.FileSystem.CopyFile("C:¥TestFolder¥test.txt", _ "C:¥TestFolder¥test2.txt", Microsoft.VisualBasic.FileIO.UIOption.OnlyErrorDialogs, _ FileIO.UICancelOption.DoNothing) ファイルのコピーを同じフォルダに作成し、既存のファイルを上書きするには
CopyFile メソッドを使用する。其の際、対象のファイルと場所を指定し、overwrite を True に設定す る。次の例では、test.txt のコピーを test2.txt と謂う名前で作成し、同じ名前のファイルが既に存在す る場合は上書きする。
Visual Basic
My.Computer.FileSystem.CopyFile("C:¥TestFolder¥test.txt", "C:¥TestFolder¥test2.txt", True) 堅牢性の高いプログラム
・パスが無効で有る。1) 長さが 0 の文字列で有る、2) 空白丈が含まれて居る、3) 無効な文字が含まれ て 居 る 、4) デバイスパスで有 る(¥¥.¥ で開始されて 居る)、の孰 れかの理 由が考えられ る (ArgumentException)。 ・システムが絶対パスを取得出来なかった(ArgumentException)。 ・パスがNothing で有る為、有効でない(ArgumentNullException)。 ・ソースファイルが有効でないか、又は、存在しない(FileNotFoundException)。 ・パスを組み合わせると既存のディレクトリと同じに成る(IOException)。
・移動先にファイルが既に存在し、overwrite が False に設定されて居る(IOException)。 ・ユーザーがファイルにアクセスするのに必要なアクセス許可が無い(IOException)。 ・移動先フォルダの同名のファイルが使用中で有る(IOException)。
・パス内のファイル名又はフォルダ名にコロン( : )が含まれて居るか、又は、形式が無効で有る (NotSupportedException)。
・ShowUI が True に、onUserCancel が ThrowException に、夫々れ設定されて居る状況で、ユーザ ーが操作をキャンセルした(OperationCanceledException)。
・ShowUI が True に、onUserCancel が ThrowException に、夫々れ設定されて居る状況で、未指定 のI/O エラーが発生した(OperationCanceledException)。 ・パスがシステムで定義されて居る最大長を超えて居る(PathTooLongException)。 ・ユーザーに必要なアクセス許可が無い(UnauthorizedAccessException)。 ・ユーザーがパスを参照するのに必要なアクセス許可が無い(SecurityException)。 ■ Visual Basic でファイルのコピーを別のディレクトリに作成する My.Computer.FileSystem.CopyFile メソッドを使用すると、ファイルをコピー出来る。其のパラメータ を使用して、既存のファイルを上書きしたり、ファイルの名前を変更したり、操作の進行状況を表示し たり、ユーザーが操作をキャンセル出来る様にしたり出来る。 テキストファイルを別のフォルダにコピーするには CopyFile メソッドを使用して、ファイルをコピーする。其の際、移動するファイルと移動先のディレク トリを指定する。 overwrite パラメータを使用して、既存のファイルを上書きするか何うかを指定出来 る。次のコード例は、CopyFile の使い方を示して居る。 Visual Basic
' Copy the file to a new location without overwriting existing file. My.Computer.FileSystem.CopyFile( _
"C:¥UserFiles¥TestFiles¥testFile.txt", _ "C:¥UserFiles¥TestFiles2¥testFile.txt")
' Copy the file to a new folder, overwriting existing file. My.Computer.FileSystem.CopyFile( _
"C:¥UserFiles¥TestFiles¥testFile.txt", _ "C:¥UserFiles¥TestFiles2¥testFile.txt", _ FileIO.UIOption.AllDialogs, _
FileIO.UICancelOption.DoNothing) ' Copy the file to a new folder and rename it. My.Computer.FileSystem.CopyFile( _
"C:¥UserFiles¥TestFiles¥testFile.txt", _ "C:¥UserFiles¥TestFiles2¥NewFile.txt", _ FileIO.UIOption.AllDialogs, _
堅牢性の高いプログラム 次の条件を満たす場合は、例外がスローされる可能性が有る。 ・パスが無効で有る。1) 長さが 0 の文字列で有る、2) 空白丈が含まれて居る、3) 無効な文字が含まれ て 居 る 、4) デバイスパスで有 る(¥¥.¥ で開始されて 居る)、の孰 れかの理 由が考えられ る (ArgumentException)。 ・システムが絶対パスを取得出来なかった(ArgumentException)。 ・パスがNothing で有る為、有効でない(ArgumentNullException)。 ・ソースファイルが有効でないか、又は、存在しない(FileNotFoundException)。 ・パスを組み合わせると既存のディレクトリと同じに成る(IOException)。
・移動先にファイルが既に存在し、overwrite が False に設定されて居る(IOException)。 ・ユーザーがファイルにアクセスするのに必要なアクセス許可が無い(IOException)。 ・移動先フォルダの同名のファイルが使用中で有る(IOException)。
・パス内のファイル名又はフォルダ名にコロン( : )が含まれて居るか、又は、形式が無効で有る (NotSupportedException)。
・ShowUI が True に、onUserCancel が ThrowException に、夫々れ設定されて居る状況で、ユーザ ーが操作をキャンセルした(OperationCanceledException)。
・ShowUI が True に、onUserCancel が ThrowException に、夫々れ設定されて居る状況で、未指定 のI/O エラーが発生した(OperationCanceledException)。 ・パスがシステムで定義されて居る最大長を超えて居る(PathTooLongException)。 ・ユーザーに必要なアクセス許可が無い(UnauthorizedAccessException)。 ・ユーザーがパスを参照するのに必要なアクセス許可が無い(SecurityException)。 ■ Visual Basic でファイルを作成する 此の例では、File クラスの Create メソッドを使用して、指定したパスに空のテキストファイルを作成 する。 使用例 Visual Basic Dim file As System.IO.FileStream
file = System.IO.File.Create("c:¥test.txt") 堅牢性の高いプログラム ファイルが既に存在する場合は、新しいファイルに置き換えられる。 ・次の条件を満たす場合は、例外が発生する可能性が有る。 ・ パ ス 名 の 形 式 に 誤 り が 有 る 場 合 。 例 え ば 、 不 正 な 文 字 が 含 ま れ て 居 る か 、 空 白 而 巳 で 有 る (ArgumentException)。 ・パスが読み取り専用で有る場合(IOException)。 ・パス名が Nothing で有る場合(ArgumentNullException)。 ・パス名が長過ぎる場合(PathTooLongException)。 ・パスが無効で有る場合(DirectoryNotFoundException)。 ・パスにコロン (":") 丈が指定されて居る場合(NotSupportedException)。 セキュリティ 部分信頼の環境では、SecurityException がスローされる事が有る。
Create メソッドの呼び出しでは、FileIOPermission が必要で有る。 ユーザーにファイル作成のアクセス許可が無い場合には、UnauthorizedAccessException がスローされ る。 ■ Visual Basic でファイルを削除する My.Computer.FileSystem オブジェクトの DeleteFile メソッドを使用すると、ファイルを削除出来る。 削除したファイルをごみ箱に送るか何うか、ファイルを削除する事をユーザーに確認するか何うか、ユ ーザーが操作をキャンセルした場合の処理方法等がオプションとして用意されて居る。 テキストファイルを削除するには DeleteFile メソッドを使用してファイルを削除する。次のコードは、test.txt と謂う名前のファイルを 削除する方法の例で有る。 Visual Basic My.Computer.FileSystem.DeleteFile("C:¥test.txt") ユーザーに確認したうえでテキストファイルを削除するには
DeleteFile メソッドを使用してファイルを削除する。其の際、showUI を AllDialogs に設定する。次の コードは、test.txt と謂う名前のファイルを、ユーザーに確認した上で削除する方法の例で有る。 Visual Basic My.Computer.FileSystem.DeleteFile("C:¥test.txt", _ FileIO.UIOption.AllDialogs, _ FileIO.RecycleOption.DeletePermanently, FileIO.UICancelOption.DoNothing) テキストファイルを削除してごみ箱に送るには
DeleteFile メソッドを使用してファイルを削除する。其の際、recycle パラメータに SendToRecycleBin を指定する。次のコードは、test.txt と謂う名前のファイルを削除してごみ箱に送る方法の例で有る。 Visual Basic My.Computer.FileSystem.DeleteFile("C:¥test.txt", _ FileIO.UIOption.AllDialogs, FileIO.RecycleOption.SendToRecycleBin) 堅牢性の高いプログラム 次の条件を満たす場合は、例外が発生する可能性が有る。 ・パスが無効な場合。1) 長さが 0 の文字列で有る、2) 空白丈が含まれて居る、3) 無効な文字が含まれ て 居 る 、4) デバイスパスで有 る(¥¥.¥ で開始されて 居る)、の孰 れかの理 由が考えられ る (ArgumentException)。 ・パスがNothing で有る為、有効でない場合(ArgumentNullException)。 ・パスがシステムで定義されて居る最大長を超えて居る場合(PathTooLongException)。 ・パス内のファイル名又はフォルダ名にコロン( : )が含まれて居るか、又は、形式が無効な場合 (NotSupportedException)。 ・ファイルが使用中の場合(IOException)。 ・ユーザーがパスを参照するのに必要なアクセス許可が無い場合(SecurityException)。 ・ファイルが存在しない場合(FileNotFoundException)
・ファイルの削除に必要なアクセス許可がユーザーに無いか、又はファイルが読み取り専用の場合 (UnauthorizedAccessException)。 ・部分信頼の状況でユーザーに充分なアクセス許可が無い場合(SecurityException)。 ・ ユ ー ザ ー が 操 作 を キ ャ ン セ ル し 、 onUserCancel が Microsoft.VisualBasic.FileIO.UICancelOption.ThrowException に 設 定 さ れ て 居 る 場 合 (OperationCanceledException)。 ■ Visual Basic でディレクトリ内の総てのファイルを削除する My.Computer.FileSystem オブジェクトの DeleteFile メソッドを使用すると、ファイルを削除出来る。 削除したファイルをごみ箱に送るか何うか、ファイルを削除する事をユーザーに確認するか何うか、ユ ーザーが操作をキャンセルした場合の処理方法等がオプションとして用意されて居る。 フォルダ内の総てのファイルを削除するには 1.My.Computer.FileSystem.GetFiles メソッドを使用して、ディレクトリ内のファイルを表す文字列 のコレクションを取得する。 2.For…Each ループと DeleteFile メソッドを使用して、各ファイルを順番に削除する。 次の例は、My Documents フォルダの総てのファイルを削除する。 Visual Basic
For Each foundFile As String In My.Computer.FileSystem.GetFiles( _ My.Computer.FileSystem.SpecialDirectories.MyDocuments, _ FileIO.SearchOption.SearchAllSubDirectories, "*.*") My.Computer.FileSystem.DeleteFile(foundFile, _ FileIO.UIOption.AllDialogs, _ FileIO.RecycleOption.DeletePermanently) Next 堅牢性の高いプログラム 次の条件を満たす場合は、例外が発生する可能性が有る。 ・パスが無効な場合。1) 長さが 0 の文字列で有る、2) 空白丈が含まれて居る、3) 無効な文字が含まれ て 居 る 、4) デバイスパスで有 る(¥¥.¥ で開始されて 居る)、の孰 れかの理 由が考えられ る (ArgumentException) ・パスがNothing で有る為、有効でない場合(ArgumentNullException) ・パスがシステムで定義されて居る最大長を超えて居る場合(PathTooLongException) ・パス内のファイル名又はフォルダ名にコロン( : )が含まれて居るか、又は、形式が無効な場合 (NotSupportedException) ・ファイルが使用中の場合(IOException) ・ユーザーがパスを参照するのに必要なアクセス許可が無い場合(SecurityException) ・ファイルが存在しない場合(FileNotFoundException) ・ファイルの削除に必要なアクセス許可がユーザーに無いか、又はファイルが読み取り専用の場合 (UnauthorizedAccessException) ・部分信頼の状況でユーザーに充分なアクセス許可が無い場合(SecurityException) ・ ユ ー ザ ー が 操 作 を キ ャ ン セ ル し 、 onUserCancel が Microsoft.VisualBasic.FileIO.UICancelOption.ThrowException に 設 定 さ れ て 居 る 場 合 (OperationCanceledException)
■ Visual Basic で特定のパターンに一致するファイルを検索する My.Computer.FileSystem.GetFiles メソッド は、ファイルのパス名を表す文字列の読み取り専用のコ レクションを返す。wildCards パラメータを使用して、特定のパターンを指定出来る。サブディレクト リを検索対象に含めるには、searchType パラメータを SearchOption.SearchAllSubDirectories に設定 する。 指定したパターンに一致するファイルが見付からなかった場合は、空のコレクションが戻る。 特定のパターンに一致するファイルを検索するには GetFiles メソッドを使用して、検索するディレクトリの名前とパス、及び、パターンを指定する。次の 例では、拡張子が .dll の総てのファイルをディレクトリ内から取得し、ListBox1 に追加する。 Visual Basic
For Each foundFile As String In My.Computer.FileSystem.GetFiles( _ My.Computer.FileSystem.SpecialDirectories.MyDocuments, _ FileIO.SearchOption.SearchAllSubDirectories, "*.dll") Listbox1.Items.Add(foundFile) Next セキュリティ 次の条件を満たす場合は、例外が発生する可能性が有る。 ・パスが無効で有る。1) 長さが 0 の文字列で有る、2) 空白丈が含まれて居る、3) 無効な文字が含まれ て 居 る 、4) デバイスパスで有 る(¥¥.¥ で開始されて 居る)、の孰 れかの理 由が考えられ る (ArgumentException)。 ・パスがNothing で有る為、有効でない(ArgumentNullException)。 ・directory が存在しない(DirectoryNotFoundException)。 ・directory は既存のファイルで有る (IOException)。 ・パスがシステムで定義されて居る最大長を越えて居る(PathTooLongException)。 ・パス内のファイル名又はフォルダ名にコロン( : )が含まれて居るか、又は、形式が無効で有る (NotSupportedException)。 ・ユーザーがパスを参照するのに必要なアクセス許可が無い(SecurityException)。 ・ユーザーに必要なアクセス許可が無い(UnauthorizedAccessException)。 ■ Visual Basic でファイルを移動する My.Computer.FileSystem.MoveFile メソッドを使用すると、ファイルを別のフォルダに移動出来る。 移動先が存在しない場合は作成される。 ファイルを移動するには MoveFile メソッドを使用し、ファイル名と移動元と移動先のファイルの場所を指定してファイルを移 動する。此の例では、test.txt と謂う名前のファイルを TestDir1 から TestDir2 に移動する。移動先フ ァイル名は、移動元ファイル名と同じで有っても指定する点に注意して欲しい。
Visual Basic
ファイルを移動する時に名前を変更するには MoveFile メソッドを使用してファイルを移動する。其の際、移動元ファイルの名前と場所、移動先の 場所、及び、移動先での新しい名前を指定する。此の例では、test.txt と謂う名前のファイルを TestDir1 からTestDir2 に移動し、名前を nexttest.txt に変更する。 堅牢性の高いプログラム 次の条件を満たす場合は、例外が発生する可能性が有る。 ・パスが無効で有る。1) 長さが 0 の文字列で有る、2) 空白丈が含まれて居る、3) 無効な文字が含まれ て 居 る 、4) デバイスパスで有 る(¥¥.¥ で開始されて 居る)、の孰 れかの理 由が考えられ る (ArgumentException)。 ・パスがNothing で有る為、有効でない(ArgumentNullException)。 ・destinationFileName が Nothing、又は、空の文字列で有る(ArgumentNullException)。 ・ソースファイルが有効でないか、又は、存在しない(FileNotFoundException)。 ・パスを組み合わせると既存のディレクトリと同じに成る、移動先のファイルが既に存在し overwrite がFalse に設定されて居る、移動先ディレクトリの同名ファイルが使用中で有る、又はユーザーがフ ァイルにアクセスするのに必要なアクセス許可が無い(IOException)。 ・パス内のファイル名やディレクトリ名にコロン( : )が含まれて居るか、又は、形式が無効で有る (NotSupportedException)。
・showUI が True に設定され、onUserCancel が ThrowException に設定されて居る状態で、ユーザ ーが操作をキャンセルしたか、又は、未指定のI/O エラーが発生した(OperationCanceledException)。 ・パスがシステムで定義されて居る最大長を超えて居る(PathTooLongException)。 ・ユーザーがパスを参照するのに必要なアクセス許可が無い(SecurityException)。 ・ユーザーに必要なアクセス許可が無い(UnauthorizedAccessException)。 ■ Visual Basic でファイルのコレクションを移動する My.Computer.FileSystem.MoveFile メソッドを使用すると、ディレクトリ間でファイルを移動出来る。 移動先が存在しない場合は作成される。 あるディレクトリから別のディレクトリにファイルのコレクションを移動するには ファイルのコレクションを定義し、MoveFile メソッドを呼び出す。此の例では、MyDocuments ディ レクトリの総てのファイルをStorageDir フォルダに移動する。 Visual Basic
For Each foundFile As String In My.Computer.FileSystem.GetFiles( _ My.Computer.FileSystem.SpecialDirectories.MyDocuments, _ FileIO.SearchOption.SearchAllSubDirectories, "*.*")
Dim foundFileInfo As New System.IO.FileInfo(foundFile)
My.Computer.FileSystem.MoveFile(foundFile, "C:¥StorageDir¥" & foundFileInfo.Name) Next
堅牢性の高いプログラム
次の条件を満たす場合は、例外が発生する可能性が有る。
て 居 る 、4) デバイスパスで有 る(¥¥.¥ で開始されて 居る)、の孰 れかの理 由が考えられ る (ArgumentException)。 ・パスがNothing で有る為、有効でない(ArgumentNullException)。 ・ソースファイルが有効でないか、又は、存在しない(FileNotFoundException)。 ・パスを組み合わせると既存のディレクトリと同じに成る、移動先のファイルが既に存在し overwrite がFalse に設定されて居る、移動先ディレクトリの同名ファイルが使用中で有る、又は、ユーザーが ファイルにアクセスするのに必要なアクセス許可が無い(IOException)。 ・パス内のファイル名やディレクトリ名にコロン( : )が含まれて居るか、又は、形式が無効で有る (NotSupportedException)。
・showUI が True に設定され、onUserCancelOption が ThrowException に設定されて居る状態で、 ユ ー ザ ー が 操 作 を キ ャ ン セ ル し た か 、 又 は 、 未 指 定 の I/O エ ラ ー が 発 生 し た (OperationCanceledException)。 ・パスがシステムで定義されて居る最大長を越えて居る(PathTooLongException)。 ・ユーザーがパスを参照するのに必要なアクセス許可が無い(SecurityException)。 ・ユーザーに必要なアクセス許可が無い(UnauthorizedAccessException)。 ■ Visual Basic でファイルの名前を変更する My.Computer.FileSystem オブジェクトの RenameFile メソッドを使用すると、ファイルの現在の位置、 現在のファイル名、及び、新しいファイル名を指定して、ファイルの名前を変更出来る。此のメソッド では、ファイルを移動する事は出来ない。ファイルを移動して名前を変更するには、MoveFile メソッ ドを使用する。 ファイルの名前を変更するには My.Computer.FileSystem.RenameFile メソッドを使用してファイルの名前を変更する。此の例では、 Test.txt と謂うファイル名を SecondTest.txt に変更する。 Visual Basic
' Change "c:¥test.txt" to the path and filename for the file that you want to rename. My.Computer.FileSystem.RenameFile("C:¥Test.txt", "SecondTest.txt") 此のコードの例は、IntelliSense コードスニペットと仕ても利用出来る。コードスニペットピッカーで は、此のスニペットは [ファイルシステム - ドライブ、フォルダ、及びファイルの処理] に有る。詳細 に付いては、「方法 : コードにスニペットを挿入する (Visual Basic)」を参照され度い。 堅牢性の高いプログラム 次の条件を満たす場合は、例外が発生する可能性が有る。 ・パスが無効で有る。1) 長さが 0 の文字列で有る、2) 空白丈が含まれて居る、3) 無効な文字が含まれ て 居 る 、4) デバイスパスで有 る(¥¥.¥ で開始されて 居る)、の孰 れかの理 由が考えられ る (ArgumentException)。 ・newName にパス情報が含まれて居る(ArgumentException)。 ・パスがNothing で有る為、有効でない(ArgumentNullException)。
・newName が Nothing 又は空の文字列で有る(ArgumentNullException)。 ・ソースファイルが有効でないか、又は、存在しない(FileNotFoundException)。 ・newName で指定したのと同じ名前のファイルかディレクトリが既に存在する(IOException)。 ・パスがシステムで定義されて居る最大長を越えて居る(PathTooLongException)。 ・パス内のファイル名やディレクトリ名にコロン( : )が含まれて居るか、又は、形式が無効で有る (NotSupportedException)。 ・ユーザーがパスを参照するのに必要なアクセス許可が無い(SecurityException)。
・ユーザーに必要なアクセス許可が無い(UnauthorizedAccessException)。 ■ Visual Basic でディレクトリの名前を変更する My.Computer.FileSystem オブジェクトの RenameDirectory メソッドを使用すると、ディレクトリの 名前を変更出来る。其の際、ディレクトリの現在の場所と名前、及び、ディレクトリの新しい名前を指 定する。此のメソッドでは、ディレクトリを移動する事は出来ない。ディレクトリを移動して名前を変 更するには、MoveDirectory メソッドを使用する。 ディレクトリの名前を変更するには My.Computer.FileSystem.RenameDirectory メソッドを使用してディレクトリの名前を変更する。次の コードは、Test ディレクトリの名前を SecondTest に変更する。 Visual Basic My.Computer.FileSystem.RenameDirectory("C:MyDocuments¥Test", "SecondTest") 此のコードの例は、IntelliSense コードスニペットと仕ても利用出来る。コードスニペットピッカーで は、此の例は [ファイルシステム - ドライブ、フォルダ、及び、ファイルの処理] に有る。詳細に付い ては、「方法 : コードにスニペットを挿入する (Visual Basic)」を参照され度い。 堅牢性の高いプログラム 次の条件を満たす場合は、例外が発生する可能性が有る。 ・パスが無効で有る。1) 長さが 0 の文字列で有る、2) 空白丈が含まれて居る、3) 無効な文字が含まれ て 居 る 、4) デバイスパスで有 る(¥¥.¥ で開始されて 居る)、の孰 れかの理 由が考えられ る (ArgumentException)。 ・newName にパス情報が含まれて居る(ArgumentException)。 ・パスがNothing で有る為、有効でない(ArgumentNullException)。
・newName が Nothing 又は空の文字列で有る(ArgumentNullException)。
・対象のディレクトリが有効でないか、又は存在しない(DirectoryNotFoundException)。 ・newName で指定したのと同じ名前のファイル又はフォルダが既に存在する(IOException)。 ・フォルダがルートフォルダで有る (IOException)。 ・パスがシステムで定義されて居る最大長を超えて居る(PathTooLongException)。 ・パス内のファイル名又はフォルダ名にコロン( : )が含まれて居るか、又は、形式が無効で有る (NotSupportedException)。 ・ユーザーがパスを参照するのに必要なアクセス許可が無い(SecurityException)。 ・ユーザーに必要なアクセス許可が無い(UnauthorizedAccessException)。 ■ Visual Basic でディレクトリを別のディレクトリにコピーする My.Computer.FileSystem.CopyDirectory メソッドメソッドを使用すると、ディレクトリを別のディレ クトリにコピー出来る。此のメソッドでは、ディレクトリ自体と其の内容がコピーされる。コピー先の ディレクトリが存在しない場合は作成される。コピー先の場所に同じ名前のディレクトリが存在し、 overwrite が False に設定されて居る場合は、2 つのディレクトリの内容がマージされる。操作の中で、 ディレクトリの新しい名前を指定出来る。 ディレクトリ内のファイルをコピーする時に、特定のファイルが原因で例外がスローされる事が有る。 例えば、overwrite が False に設定されていて、マージを実行して居る時に、既に存在するファイル等 が原因で有る。斯うしてスローされた例外は、単一の例外に統合され、其の Data プロパティにエント リが保持されて居る。其等のエントリでは、ファイルやディレクトリパスがキーと成って居り、其れに
対応する値には、該当する例外メッセージが格納されて居る。 ディレクトリを別のディレクトリにコピーするには CopyDirectory メソッドを使用し、コピー元とコピー先のディレクトリ名を指定する。次の例では、 TestDirectory1 と謂う名前のディレクトリを TestDirectory2 にコピーする。其の際、既存のファイル は上書きする。 Visual Basic
My.Computer.FileSystem.CopyDirectory("C:¥TestDirectory1", "C:¥TestDirectory2", True)
此のコードの例は、IntelliSense コードスニペットとしても利用出来る。コードスニペットピッカーで は、コード例は [ファイルシステム - ドライブ、フォルダ、及び、ファイルの処理] に有る。詳細に付 いては、「方法 : コードにスニペットを挿入する (Visual Basic)」を参照され度い。 堅牢性の高いプログラム 次の条件を満たす場合は、例外が発生する可能性が有る。 ・ディレクトリに指定された新しい名前にコロン( : )、又は、スラッシュ( ¥ 又は / )が含まれて 居る(ArgumentException)。 ・パスが無効で有る。1) 長さが 0 の文字列で有る、2) 空白丈が含まれて居る、3) 無効な文字が含まれ て 居 る 、4) デバイスパスで有 る(¥¥.¥ で開始されて 居る)、の孰 れかの理 由が考えられ る (ArgumentException)。 ・パスがNothing で有る為、有効でない(ArgumentNullException)。 ・destinationDirectoryName が Nothing、又は、空の文字列で有る(ArgumentNullException)。 ・コピー元のディレクトリが存在しない(DirectoryNotFoundException)。 ・コピー元のディレクトリがルートディレクトリで有る (IOException)。 ・パスを組み合わせると既存のファイルと同じに成る(IOException)。 ・コピー元とコピー先のパスが同じで有る(IOException)。 ・ShowUI が UIOption.AllDialogs に設定されて居り、ユーザーが操作をキャンセルしたか、又は、デ ィレクトリ内の幾つかのファイルをコピー出来なかった(OperationCanceledException)。 ・操作が巡回して居る(InvalidOperationException)。 ・パスにコロン( : )が含まれて居る(NotSupportedException)。 ・パスがシステムで定義されて居る最大長を越えて居る(PathTooLongException)。 ・パス内のファイル名又はフォルダ名にコロン( : )が含まれて居るか、又は、形式が無効で有る (NotSupportedException)。 ・ユーザーがパスを参照するのに必要なアクセス許可が無い(SecurityException)。 ・コピー先のファイルが存在するが、アクセス出来ない(UnauthorizedAccessException)。 ■ Visual Basic でディレクトリを作成する My.Computer.FileSystem オブジェクトの CreateDirectory メソッドを使用すると、ディレクトリを作 成出来る。 ディレクトリが既に存在して居る場合、例外はスローされない。 ディレクトリを作成するには CreateDirectory メソッドに、ディレクトリを作成する場所の完全パスを指定する。此の例では、 NewDirectory ディレクトリを C:¥Documents and Settings¥All Users¥Documents に作成する。