by James » 2010年8月16日(月) 17:27
ファイルの追加書き込みを行うソフトを作ろうと思い以下のコードを作成しました。
環境 XPSP3、AB4.24.0
コード: 全て選択
dim hFile As HANDLE
dim lpOverlapped=NULL As OVERLAPPED
dim buf[30] as Byte
dim fname[30] as Byte
dim gfs1 as DWORD '書き込みサイズ(予定)
dim gfs2 as DWORD '書き込みサイズ(結果)
dim i as integer 'ファイルポインタの結果
dim wans as integer '書き込み結果
if lstrcpy(buf,"abcdefghijklmnopqrstuvwxyz") = NULL then
MsgBox NULL, buf, "文字列コピーミス", MB_ICONEXCLAMATION
End If
gfs1=lstrlen(buf)
lstrcpy(fname,"read_log.txt")
hFile=CreateFile(fname, GENERIC_WRITE or GENERIC_WRITE, FILE_SHARE_READ ,ByVal 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)
if hFile <> INVALID_HANDLE_VALUE then
i=SetFilePointer(hFile, 0, NULL, FILE_END) 'ファイルポインタをファイルの最後に移動
if i <> -1 then '移動できたら
wans=WriteFile(hFile,buf,gfs1,VarPtr(gfs2),lpOverlapped)
if wans=TRUE then
if(CloseHandle(hFile) = TRUE) then
MsgBox NULL, "無事終了", "Error", MB_ICONEXCLAMATION
Else
MsgBox NULL, "ファイルのクローズミス", "Error", MB_ICONEXCLAMATION
End If
Else
MsgBox NULL, "ファイルのオープンミス", "Error", MB_ICONEXCLAMATION
End If
Else
MsgBox NULL, "ファイルポインタの移動エラー", "Error", MB_ICONEXCLAMATION
End If
Else
MsgBox NULL, "ファイルが開けません", "Error", MB_ICONEXCLAMATION
End If
ファイルをオープンし、ポインタを最後に動かし、書き込んでいるだけなのですが、
思ったように追加書き込みされず、常に新規書き込み(ファイルサイズは増えない)
状況です。
問題点は、SetFilePointerでポインタは移動するのですが、
その後WriteFileで書き込んでも、ポインタが移動しない(ポインタ0から書き込み)
事のようです。
根本的に、SetFilePointerの使い方(理解)が間違っているのでしょうか?
それとも、CreateFileの宣言の仕方でしょうか?
ご教授いただければ幸いです。
ファイルの追加書き込みを行うソフトを作ろうと思い以下のコードを作成しました。
環境 XPSP3、AB4.24.0
[code]
dim hFile As HANDLE
dim lpOverlapped=NULL As OVERLAPPED
dim buf[30] as Byte
dim fname[30] as Byte
dim gfs1 as DWORD '書き込みサイズ(予定)
dim gfs2 as DWORD '書き込みサイズ(結果)
dim i as integer 'ファイルポインタの結果
dim wans as integer '書き込み結果
if lstrcpy(buf,"abcdefghijklmnopqrstuvwxyz") = NULL then
MsgBox NULL, buf, "文字列コピーミス", MB_ICONEXCLAMATION
End If
gfs1=lstrlen(buf)
lstrcpy(fname,"read_log.txt")
hFile=CreateFile(fname, GENERIC_WRITE or GENERIC_WRITE, FILE_SHARE_READ ,ByVal 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)
if hFile <> INVALID_HANDLE_VALUE then
i=SetFilePointer(hFile, 0, NULL, FILE_END) 'ファイルポインタをファイルの最後に移動
if i <> -1 then '移動できたら
wans=WriteFile(hFile,buf,gfs1,VarPtr(gfs2),lpOverlapped)
if wans=TRUE then
if(CloseHandle(hFile) = TRUE) then
MsgBox NULL, "無事終了", "Error", MB_ICONEXCLAMATION
Else
MsgBox NULL, "ファイルのクローズミス", "Error", MB_ICONEXCLAMATION
End If
Else
MsgBox NULL, "ファイルのオープンミス", "Error", MB_ICONEXCLAMATION
End If
Else
MsgBox NULL, "ファイルポインタの移動エラー", "Error", MB_ICONEXCLAMATION
End If
Else
MsgBox NULL, "ファイルが開けません", "Error", MB_ICONEXCLAMATION
End If
[/code]
ファイルをオープンし、ポインタを最後に動かし、書き込んでいるだけなのですが、
思ったように追加書き込みされず、常に新規書き込み(ファイルサイズは増えない)
状況です。
問題点は、SetFilePointerでポインタは移動するのですが、
その後WriteFileで書き込んでも、ポインタが移動しない(ポインタ0から書き込み)
事のようです。
根本的に、SetFilePointerの使い方(理解)が間違っているのでしょうか?
それとも、CreateFileの宣言の仕方でしょうか?
ご教授いただければ幸いです。