Ignore:
Timestamp:
Mar 13, 2008, 12:45:52 PM (16 years ago)
Author:
OverTaker
Message:

Fileクラスを実装

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Include/Classes/System/IO/File.ab

    r466 r476  
    22Namespace IO
    33
    4 
     4/*
     5@brief ファイルのアクセス方法を表す
     6*/
    57Enum FileAccess
    68    Read      = GENERIC_READ
     
    911End Enum
    1012
     13/*
     14@brief ファイルの属性を表す
     15*/
    1116Enum FileAttributes
    1217    Archive           = FILE_ATTRIBUTE_ARCHIVE
     
    2631End Enum
    2732
     33/*
     34@brief ファイルの作成モードを表す
     35*/
    2836Enum FileMode
    2937    Append       = OPEN_ALWAYS
     
    3543End Enum
    3644
     45/*
     46@brief ファイルの共有を表す
     47*/
    3748Enum FileShare
    3849    None       = 0
     
    4354End Enum
    4455
     56/*
     57@brief  ファイルの操作,情報を取得するクラス
     58@date   2008/03/13
     59@author OverTaker
     60*/
     61
     62Imports System.Collections.Generic
     63
    4564Class File
    4665Public
     
    5069    '----------------------------------------------------------------
    5170
    52 /*  Static Sub AppendAllText( path As String, contents As String )
    53         ' TODO: 実装
    54     End Sub*/
     71    /*
     72    @brief ファイルにテキストを追加する
     73    @param ファイルパス
     74    @param 追加するテキスト
     75    */
     76    Static Sub AppendAllText( path As String, contents As String )
     77        Dim stream = AppendText(path) As StreamWriter
     78        stream.Write(contents)
     79        stream.Close()
     80    End Sub
    5581
    5682/*  Static Sub AppendAllText( path As String, contents As String, encoding As Encoding )
     
    5884    End Sub */
    5985
    60 /*  Static Function AppendText( path As String ) As StreamWriter
    61         ' TODO: 実装
    62     End Function*/
    63 
     86    /*
     87    @brief  ファイルにテキストを追加するストリームを作成する
     88    @param  ファイルパス
     89    @return ストリームライター
     90    */
     91    Static Function AppendText( path As String ) As StreamWriter
     92        Return New StreamWriter(Open(path, FileMode.Append))
     93    End Function
     94
     95    /*
     96    @brief  ファイルをコピーする(上書きできない)
     97    @param  コピー元のファイルパス
     98    @param  コピー先のファイルパス
     99    */
    64100    Static Sub Copy( sourceFileName As String, destFileName As String )
    65101        Copy(sourceFileName, destFileName, False)
    66102    End Sub
    67103
     104    /*
     105    @brief  ファイルをコピーする
     106    @param  コピー元のファイルパス
     107    @param  コピー先のファイルパス
     108    @param  上書きする場合True,しない場合False
     109    */
    68110    Static Sub Copy( sourceFileName As String, destFileName As String, overwrite As Boolean )
    69111        If Not CopyFile(Path.GetFullPath(sourceFileName), Path.GetFullPath(destFileName), overwrite) Then
     
    72114    End Sub
    73115
     116    /*
     117    @brief  新しいファイルを作成し、そのストリームを取得する
     118    @param  ファイルパス
     119    @return ファイルストリーム
     120    */
    74121    Static Function Create( path As String ) As FileStream
    75122        Return New FileStream(path, FileMode.CreateNew, FileAccess.ReadWrite)
     
    96143    End Sub*/
    97144
     145    /*
     146    @brief ファイルを削除する
     147    @param ファイルパス
     148    */
    98149    Static Sub Delete( path As String )
    99         If Not DeleteFile(path) Then
     150        If Not DeleteFile(Path.GetFullPath(path)) Then
    100151            Throw New IOException("File.Delete: Failed to DeleteFile.")
    101152        End If
     
    106157    End Sub*/
    107158
     159    /*
     160    @brief  ファイルが存在するかどうかを取得する
     161    @param  ファイルパス
     162    @retval True  存在する
     163    @retval False 存在しない
     164    */
    108165    Static Function Exists( path As String ) As Boolean
    109166        Dim data As WIN32_FIND_DATA
    110         Dim hFind = FindFirstFile(ToTCStr(path), data)
     167        Dim hFind = FindFirstFile(ToTCStr(Path.GetFullPath(path)), data)
    111168        FindClose(hFind)
    112169
     
    126183    End Function */
    127184
     185    /*
     186    @brief  ファイルの属性を取得する
     187    @param  ファイルパス
     188    @return ファイル属性
     189    */
    128190    Static Function GetAttributes( path As String ) As FileAttributes
    129191        Return New FileAttributes(getFileData(path).dwFileAttributes As Long, "FileAttributes")
    130192    End Function
    131193
     194    /*
     195    @brief  ファイルの作成日時を取得する
     196    @param  ファイルパス
     197    @return 作成日時
     198    */
    132199    Static Function GetCreationTime( path As String ) As DateTime
    133200        Return System.DateTime.FromFileTime(getFileData(path).ftCreationTime)
    134201    End Function
    135202
     203    /*
     204    @brief  ファイルの作成日時をUTC時刻で取得する
     205    @param  ファイルパス
     206    @return 作成日時
     207    */
    136208    Static Function GetCreationTimeUtc( path As String ) As DateTime
    137209        Return System.DateTime.FromFileTimeUtc(getFileData(path).ftCreationTime)
    138210    End Function
    139211
     212    /*
     213    @brief  ファイルの最終アクセス日時を取得する
     214    @param  ファイルパス
     215    @return 最終アクセス日時
     216    */
    140217    Static Function GetLastAccessTime( path As String ) As DateTime
    141218        Return System.DateTime.FromFileTime(getFileData(path).ftLastAccessTime)
    142219    End Function
    143220
     221    /*
     222    @brief  ファイルの最終アクセス日時をUTC時刻で取得する
     223    @param  ファイルパス
     224    @return 最終アクセス日時
     225    */
    144226    Static Function GetLastAccessTimeUtc( path As String ) As DateTime
    145227        Return System.DateTime.FromFileTimeUtc(getFileData(path).ftLastAccessTime)
    146228    End Function
    147229
     230    /*
     231    @brief  ファイルの最終書き込み日時を取得する
     232    @param  ファイルパス
     233    @return 最終書き込み日時
     234    */
    148235    Static Function GetLastWriteTime( path As String ) As DateTime
    149236        Return System.DateTime.FromFileTime(getFileData(path).ftLastWriteTime)
    150237    End Function
    151238
     239    /*
     240    @brief  ファイルの最終書き込み日時をUTC時刻で取得する
     241    @param  ファイルパス
     242    @return 最終書き込み日時
     243    */
    152244    Static Function GetLastWriteTimeUtc( path As String ) As DateTime
    153245        Return System.DateTime.FromFileTimeUtc(getFileData(path).ftLastWriteTime)
    154246    End Function
    155247
     248    /*
     249    @brief  ファイルを移動する
     250    @param  移動元のファイルパス
     251    @param  移動先のファイルパス
     252    */
    156253    Static Sub Move( sourceFileName As String, destFileName As String )
    157254        If Not MoveFile(Path.GetFullPath(sourceFileName), Path.GetFullPath(destFileName)) Then
     
    160257    End Sub
    161258
     259    /*
     260    @brief  ファイルストリームを作成する
     261    @param  ファイルパス
     262    @param  ファイルモード
     263    @return ファイルストリーム
     264    */
    162265    Static Function Open( path As String, mode As FileMode ) As FileStream
    163266        Return New FileStream(path, mode)
    164267    End Function
    165268
     269    /*
     270    @brief  ファイルストリームを作成する
     271    @param  ファイルパス
     272    @param  ファイルモード
     273    @param  ファイルアクセス
     274    @return ファイルストリーム
     275    */
    166276    Static Function Open( path As String, mode As FileMode, access As FileAccess ) As FileStream
    167277        Return New FileStream(path, mode, access)
    168278    End Function
    169279
     280    /*
     281    @brief  ファイルストリームを作成する
     282    @param  ファイルパス
     283    @param  ファイルモード
     284    @param  ファイルアクセス
     285    @param  ファイル共有
     286    @return ファイルストリーム
     287    */
    170288    Static Function Open( path As String, mode As FileMode, access As FileAccess, share As FileShare ) As FileStream
    171289        Return New FileStream(path, mode, access, share)
    172290    End Function
    173291
     292    /*
     293    @brief  読み取り専用のファイルストリームを作成する
     294    @param  ファイルパス
     295    @return ファイルストリーム
     296    */
    174297    Static Function OpenRead( path As String ) As FileStream
    175298        Return Open(path, FileMode.Open, FileAccess.Read, FileShare.Read)
    176299    End Function
    177300
     301    /*
     302    @brief  読み取り専用のストリームを作成する
     303    @param  ファイルパス
     304    @return ストリームリーダー
     305    */
    178306    Static Function OpenText( path As String ) As StreamReader
    179307        Return New StreamReader(path)
    180308    End Function
    181309
     310    /*
     311    @brief  書き込み専用のファイルストリームを作成する
     312    @param  ファイルパス
     313    @return ファイルストリーム
     314    */
    182315    Static Function OpenWrite( path As String ) As FileStream
    183316        Return Open(path, FileMode.Open, FileAccess.Write)
     
    188321    End Function*/
    189322
    190 /*  Static Function ReadAllLines( path As String ) As Strings
    191         ' TODO: 実装
    192     End Function */
     323    /*
     324    @brief  ファイルのすべての行を読み取る
     325    @param  ファイルパス
     326    @return 各行の文字列が格納されたリスト
     327    */
     328    Static Function ReadAllLines( path As String ) As List<String>
     329        Dim stream = New StreamReader(path)
     330        Dim readLines As List<String>
     331        Dim readLine = stream.ReadLine() As String
     332        While Not ActiveBasic.IsNothing(readLine)
     333            readLines.Add(readLine)
     334            readLine = stream.ReadLine()
     335        Wend
     336        stream.Close()
     337        Return readLines
     338    End Function
    193339
    194340/*  Static Function ReadAllLines( path As String, encoding As Encoding ) As Strings
     
    196342    End Function */
    197343
    198 /*  Static Function ReadAllText( path As String ) As String
    199         ' TODO: 実装
    200     End Function*/
     344    /*
     345    @brief  ファイルをすべて文字列として読み込む
     346    @param  ファイルパス
     347    @return ファイルの内容
     348    */
     349    Static Function ReadAllText( path As String ) As String
     350        Dim stream = OpenText(path)
     351        Dim string = stream.ReadToEnd()
     352        stream.Close()
     353        Return string
     354    End Function
    201355
    202356/*  Static Function ReadAllText( path As String, encoding As Encoding ) As String
     
    204358    End Function */
    205359
    206 /*  Static Sub Replace( sourceFileName As String, destinationFileName As String, destinationBackupFileName As String )
     360    /*
     361    @brief  ファイルを置き換える
     362    @param  置き換えるファイルパス
     363    @param  置き換えられるファイルパス
     364    @param  置き換えられるファイルのバックアップを作成するファイルパス
     365    */
     366    Static Sub Replace( sourceFileName As String, destinationFileName As String, destinationBackupFileName As String )
     367        Copy(destinationFileName, destinationBackupFileName)
     368        Copy(sourceFileName, destinationFileName, True)
     369    End Sub
     370
     371/*  Static Sub Replace( sourceFileName As String, destinationFileName As String, destinationBackupFileName As String, ignoreMetadataErrors As Boolean )
    207372        ' TODO: 実装
    208373    End Sub*/
    209374
    210 /*  Static Sub Replace( sourceFileName As String, destinationFileName As String, destinationBackupFileName As String, ignoreMetadataErrors As Boolean )
    211         ' TODO: 実装
    212     End Sub*/
    213 
    214375/*  Static Sub SetAccessControl( path As String, fileSecurity As FileSecurity )
    215376        ' TODO: 実装
    216377    End Sub */
    217378
     379    /*
     380    @brief  ファイルの属性を設定する
     381    @param  ファイルパス
     382    @param  ファイル属性
     383    */
    218384    Static Sub SetAttributes( path As String, fileAttributes As FileAttributes )
    219385        If Not SetFileAttributes(ToTCStr(path), fileAttributes) Then
     
    222388    End Sub
    223389
     390    /*
     391    @brief  ファイルの作成日時を設定する
     392    @param  ファイルパス
     393    @param  作成日時
     394    */
    224395    Static Sub SetCreationTime( path As String, creationTime As DateTime )
    225396        SetCreationTimeUtc(path, creationTime)
    226397    End Sub
    227398
     399    /*
     400    @brief  ファイルの作成日時をUTC時刻で設定する
     401    @param  ファイルパス
     402    @param  作成日時
     403    */
    228404    Static Sub SetCreationTimeUtc( path As String, creationTimeUtc As DateTime )
    229405        Dim hFile = createFileToSetTime(path) As HANDLE
     
    232408    End Sub
    233409
     410    /*
     411    @brief  ファイルの最終アクセス日時を設定する
     412    @param  ファイルパス
     413    @param  最終アクセス日時
     414    */
    234415    Static Sub SetLastAccessTime( path As String, lastAccessTime As DateTime )
    235416        SetLastAccessTimeUtc(path, lastAccessTime)
    236417    End Sub
    237418
     419    /*
     420    @brief  ファイルの最終アクセス日時をUTC時刻で設定する
     421    @param  ファイルパス
     422    @param  最終アクセス日時
     423    */
    238424    Static Sub SetLastAccessTimeUtc( path As String, lastAccessTimeUtc As DateTime )
    239425        Dim hFile = createFileToSetTime(path) As HANDLE
     
    242428    End Sub
    243429
     430   
     431    /*
     432    @brief  ファイルの最終書き込み日時を設定する
     433    @param  ファイルパス
     434    @param  最終書き込み日時
     435    */
    244436    Static Sub SetLastWriteTime( path As String, lastWriteTime As DateTime )
    245437        SetLastWriteTimeUtc(path, lastWriteTime)
    246438    End Sub
    247439
     440    /*
     441    @brief  ファイルの最終書き込み日時をUTC時刻で設定する
     442    @param  ファイルパス
     443    @param  最終書き込み日時
     444    */
    248445    Static Sub SetLastWriteTimeUtc( path As String, lastWriteTimeUtc As DateTime )
    249446        Dim hFile = createFileToSetTime(path) As HANDLE
     
    256453    End Sub*/
    257454
    258 /*  Static Sub WriteAllLines( path As String, contents As Strings )
     455    /*
     456    @brief  リストに格納された文字列を一行ずつファイルに書き込む
     457    @param  ファイルパス
     458    @param  書き込む文字列リスト
     459    */
     460    Static Sub WriteAllLines( path As String, contents As List<String> )
     461        Dim stream = New StreamWriter(path)
     462        Dim enumerator = contents.GetEnumerator()
     463        enumerator.Reset()
     464        While enumerator.MoveNext()
     465            stream.WriteLine(enumerator.Current)
     466        Wend
     467        stream.Close()
     468    End Sub
     469
     470/*  Static Sub WriteAllLines( path As String, contents As Strings, encoding As Enconding )
    259471        ' TODO: 実装
    260472    End Sub */
    261473
    262 /*  Static Sub WriteAllLines( path As String, contents As Strings, encoding As Enconding )
     474    /*
     475    @brief  ファイルに文字列を書き込む
     476    @param  ファイルパス
     477    @param  書き込む文字列
     478    */
     479    Static Sub WriteAllText( path As String, contents As String )
     480        Dim stream = New StreamWriter(path)
     481        stream.Write(contents)
     482        stream.Close()
     483    End Sub
     484
     485/*  Static Sub WriteAllText( path As String, contents As String, encoding As Enconding )
    263486        ' TODO: 実装
    264487    End Sub */
    265488
    266 /*  Static Sub WriteAllText( path As String, contents As String )
    267         ' TODO: 実装
    268     End Sub*/
    269 
    270 /*  Static Sub WriteAllText( path As String, contents As String, encoding As Enconding )
    271         ' TODO: 実装
    272     End Sub */
    273 
    274489Private
    275 
     490    '----------------------------------------------------------------
     491    ' プライベート メソッド
     492    '----------------------------------------------------------------
     493
     494    /*
     495    @brief  ファイルの情報を取得する
     496    @param  ファイルパス
     497    @return WIN32_FIND_DATA構造体
     498    */
    276499    Static Function getFileData(path As String) As WIN32_FIND_DATA
    277500        Dim data As WIN32_FIND_DATA
     
    286509    End Function
    287510
     511    /*
     512    @brief  ファイルの各種日時を変更するためのファイル作成を行う
     513    @param  ファイルパス
     514    @return ファイルハンドル
     515    */
    288516    Static Function createFileToSetTime(path As String) As HANDLE
    289517        Dim hFile As HANDLE
Note: See TracChangeset for help on using the changeset viewer.