Top > OOoBasic > Generic > file

ファイルへのアクセス Edit

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

アクセス Edit

ファイルへのアクセスには com.sun.star.ucb.SimpleFileAccess サービスを使用します。

Sub SimpleFileAcccess_1
 Dim oSimpleFileAccess As Object

  oSimpleFileAcces = createUnoService( _
     "com.sun.star.ucb.SimpleFileAccess" )
End Sub

ファイルの確認 Edit

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

ファイルの有無の確認には 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

ファイル操作 Edit

ファイルのコピー,移動,削除,ディレクトリの作成などです。 ファイルのコピーには 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 メソッドではディレクトリを指定すると,ディレクトリが空でなくてもディレクトリごと全て削除します。 実際に使用する際にはファイルの有無や読み込み専用の確認をもっとしっかり行う必要があります。

その他 Edit

ファイルのサイズの取得には 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