ファイルの終わり(EOF)を移動          <TOP>


CreateFile 指定したファイルをオープンし、デバイスハンドルを返す

WriteFile データをファイルに書き出す

SetFilePointer 開いているファイルのポインタを移動

SetEndOfFile 指定されたファイルの終わり(EOF)ポジションをファイルポインタの現在のポジションに移動

CloseHandle オープンされているオブジェクトハンドルをクローズ

 

左:起動時、C:\Temp\EOF.txtにMyStrを書き込んでいます。確認(fig.3)    右:Length=36をEOFとして再度書き込みます。確認(fig.4)

 

fig.3

fig.4

 

'================================================================
'= ファイルの終わり(EOF)を移動
'=    (SetEndOfFile.bas)
'================================================================
#include "Windows.bi"

' 指定したファイルをオープンし、デバイスハンドルを返す
Declare Function Api_CreateFile& Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName$, ByVal dwDesiredAccess&, ByVal dwShareMode&, lpSecurityAttributes As Any, ByVal dwCreationDisposition&, ByVal dwFlagsAndAttributes&, ByVal hTemplateFile&)

' データをファイルに書き出す
Declare Function Api_WriteFile& Lib "kernel32" Alias "WriteFile" (ByVal hFile&, lpBuffer As Any, ByVal nNumberOfBytesToWrite&, lpNumberOfBytesWritten&, lpOverlapped As Any)

' 開いているファイルのポインタを移動
Declare Function Api_SetFilePointer& Lib "kernel32" Alias "SetFilePointer" (ByVal hFile&, ByVal lDistanceToMove&, lpDistanceToMoveHigh&, ByVal dwMoveMethod&)

' 指定されたファイルの終わり(EOF)ポジションをファイルポインタの現在のポジションに移動
Declare Function Api_SetEndOfFile& Lib "kernel32" Alias "SetEndOfFile" (ByVal hFile&)

' オープンされているオブジェクトハンドルをクローズ
Declare Function Api_CloseHandle& Lib "kernel32" Alias "CloseHandle" (ByVal hObject&)

#define GENERIC_READ -2147483648        '読み込みモード(&H80000000)
#define GENERIC_WRITE &H40000000        '書き込みモード
#define FILE_SHARE_READ &H1             '後続のオープン操作で読み取りアクセスが要求された場合、そのオープンを許可
#define FILE_SHARE_WRITE &H2            '後続のオープン操作で書き込みアクセスが要求された場合、そのオープンを許可
#define OPEN_ALWAYS 4                   'ファイルをオープンする(存在しない場合作成)
#define FILE_BEGIN 0                    'ファイルポインタを先頭に

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Var hFile As Long
    Var MyStr As String
    Var Length As Long
    Var BytesWritten As Long
    Var Path As String
    Var Ret As Long

    Path = "C:\Temp\EOF.txt"
    MyStr = "開いているファイルのポインタを移動。データをファイルに書き出す。"
    Length = Len(MyStr)

    hFile = Api_CreateFile(Path, GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0, OPEN_ALWAYS, 0, 0)
    If hFile = -1 Then End

    Ret = Api_WriteFile(hFile, MyStr, Length, BytesWritten, ByVal 0)
    A% = MessageBox("", "' " & "OK 'をクリックする前に 'C:\Temp\EOF.txt' を確認してください!", 0, 2)

    Ret = Api_SetFilePointer(hFile, 36, 0, FILE_BEGIN)
    Ret = Api_SetEndOfFile(hFile)
    Ret = Api_CloseHandle(hFile)

    A% = MessageBox("", "'" & Path & "' を、もう一度確認してください!", 0, 2)
    End
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End