ファイルの終わり(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