Top > OOoBasic > Generic > file
*ファイルへのアクセス &aname(file); [#ud0214b9]

外部ファイルへのアクセスを OpenOffice.org API のサービスを使用して行います。ファイルアクセスは OpenOffice.org Basic の実行の際のセキュリティー設定に大きく関与しています。

#contents

**アクセス [#s3c0e913]

ファイルへのアクセスには com.sun.star.ucb.SimpleFileAccess サービスを使用します。
 Sub SimpleFileAcccess_1
  Dim oSimpleFileAccess As Object
 
   oSimpleFileAcces = createUnoService( _
      "com.sun.star.ucb.SimpleFileAccess" )
 End Sub
**ファイルの確認 [#b0ba4405]

ファイルの有無や,ディレクトリかどうか,読み込み専用,などの確認に使用するメソッドです。

ファイルの有無の確認には exists メソッドを使用します。引数に指定した URL のファイルの有無を調べます。

 Sub SimpleFileAcccess_2
 Dim oSimpleFileAccess As Object
 Dim oSettings As Object
 Dim oPathSettings As Object
 Dim sURL As String
   oSettings = createUnoService( "com.sun.star.frame.Settings" )
   oPathSettings = oSettings.getByName( "PathSettings" )
   sURL = oPathSettings.getPropertyValue( "ProgPath" ) & _
     "/" & "soffice.exe"
 
   oSimpleFileAccess = createUnoService( _
     "com.sun.star.ucb.SimpleFileAccess" )
   MsgBox oSimpleFileAccess.exists( sURL )
 End Sub

引数は URL 形式で指定します。
URL がディレクトリを示しているのかどうかを調べるには isFolder メソッドを使用します。引数はファイルの URL です。

 Sub SimpleFileAcccess_3
 Dim oSimpleFileAccess As Object
 Dim oSettings As Object
 Dim oPathSettings As Object
 Dim sURL As String
   oSettings = createUnoService( "com.sun.star.frame.Settings" )
   oPathSettings = oSettings.getByName( "PathSettings" )
   sURL = oPathSettings.getPropertyValue( "ProgPath" )
 
   oSimpleFileAccess = createUnoService( _
     "com.sun.star.ucb.SimpleFileAccess" )
   MsgBox oSimpleFileAccess.isFolder( sURL )
 End Sub

ファイルが読み込み専用かどうかを調べるには isReadOnly メソッドを使用します。引数はファイルの URL です。

 Sub SimpleFileAcccess_4
 Dim oSimpleFileAccess As Object
 Dim oSettings As Object
 Dim oPathSettings As Object
 Dim sURL As String
   oSettings = createUnoService( "com.sun.star.frame.Settings" )
   oPathSettings = oSettings.getByName( "PathSettings" )
   sURL = oPathSettings.getPropertyValue( "ProgPath" ) & _
      "/" & "soffice.exe"
 
   oSimpleFileAccess = createUnoService( _
     "com.sun.star.ucb.SimpleFileAccess" )
   MsgBox oSimpleFileAccess.isReadOnly( sURL )
 End Sub

**ファイル操作 [#qd42228a]

ファイルのコピー,移動,削除,ディレクトリの作成などです。
ファイルのコピーには copy メソッドを使用します。また,ファイルの削除には move メソッドを,ファイルの削除には kill メソッドを使用します。ディレクトリの作成には createFolder を使用します。

 Sub SimpleFileAcccess_5
 Dim oSimpleFileAccess As Object
 Dim oSettings As Object
 Dim oPathSettings As Object
 Dim sURL As String
 Dim sSourceURL As String
 Dim sDestURL As String
   oSettings = createUnoService( _
     "com.sun.star.frame.Settings" )
   oPathSettings = oSettings.getByName( "PathSettings" )
   sURL = oPathSettings.getPropertyValue( "Work" ) & _
     "/simplefileaccess"
   sSourceURL = oPathSettings.getPropertyValue( "ProgPath" ) & _
      "/" & "soffice.exe"
   sDestURL = sURL & "/" & "soffice.exe"
 
   oSimpleFileAccess = createUnoService( _
     "com.sun.star.ucb.SimpleFileAccess" )
   If NOT oSimpleFileAccess.exists( sURL ) Then
     With oSimpleFileAccess
       .createFolder( sURL )
       .copy( sSourceURL, sDestURL )
       MsgBox oSimpleFileAccess.exists( sDestURL )
       .move( sDestURL, sURL & "/" & "OOo.exe"
       Print .exists( sDestURL ), _
         .exists( sURL & "/" & "OOo.exe" )
       .kill( sURL )
       MsgBox oSimpleFileAccess.exists( sURL )
     End With
   End If
 End Sub

kill メソッドではディレクトリを指定すると,ディレクトリが空でなくてもディレクトリごと全て削除します。
実際に使用する際にはファイルの有無や読み込み専用の確認をもっとしっかり行う必要があります。 
**その他 [#b31c2481]

ファイルのサイズの取得には getSize メソッド,ファイルタイプの取得には getContentType メソッドを,ファイルの更新日時の取得には getDateTimeModified メソッド,ディレクトリの全てのファイル名を取得するには getFolderContents メソッドを使用します。

 Sub SimpleFileAcccess_6
 Dim oSimpleFileAccess As Object
 Dim oSettings As Object
 Dim oPathSettings As Object
 Dim sURL As String
   oSettings = createUnoService( "com.sun.star.frame.Settings" )
   oPathSettings = oSettings.getByName( "PathSettings" )
   sURL = oPathSettings.getPropertyValue( "ProgPath" ) & _
     "/soffice.exe"
 
   oSimpleFileAccess = createUnoService( _
     "com.sun.star.ucb.SimpleFileAccess" )
   MsgBox "size: " & oSimpleFileAccess.getSize( sURL )
   MsgBox "type: " & oSimpleFileAccess.getContentType( sURL )
   MsgBox "Time: " & oSimpleFileAccess.getDateTimeModified( sURL )
 End Sub

上の三つのメソッドの引数はともにファイルの URL です。
getFolderContents メソッドではサブディレクトリ名も取得するかどうかを指定できます。

 Sub SimpleFileAcccess_7
 Dim oSimpleFileAccess As Object
 Dim oSettings As Object
 Dim oPathSettings As Object
 Dim sURL As String
 Dim sFiles() As String
 Dim sContents As String
   oSettings = createUnoService( "com.sun.star.frame.Settings" )
   oPathSettings = oSettings.getByName( "PathSettings" )
   sURL = oPathSettings.getPropertyValue( "ProgPath" )
 
   oSimpleFileAccess = createUnoService( _
     "com.sun.star.ucb.SimpleFileAccess" )
   For i% = 0 To 1
     sContents = ""
     sFiles() = oSimpleFileAccess.getFolderContents( sURL, i )
     For j% = 0 To UBound( sFiles() )
       sContents = sContents & sFiles( j ) & Chr(10)
     Next j
     MsgBox UBound( sFiles() ) + 1 & " files" & Chr(10) & sContents
   Next i
 End Sub

getFolderContents メソッドの最初に引数には URL を,二番めの引数にはサブディレクトリ名をファイルと同様に表示するかどうかを指定します。

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes