複数ファイルを1つにまとめる コード添削願い
複数のファイルを1つのファイルにまとめようとがんばっています。
リストボックスを用意し、ファイル一覧をつくり、
そこからアドレスを取得して、まとめていくという手順です。
ただ、最後のWriteFile関数の部分で、書き込みが出来ずエラーが返ります。
なぜかが分かりません。
ご教授お願いします。
Dim num As Long
Dim buf As BytePtr
Dim hFile As HANDLE
Dim n As Long
Dim LastFileSize As Long
num=SendDlgItemMessage(hMainWnd,ListBox1,LB_GETCOUNT,0,0)
For n=0 to num-1 Step 1
'ファイル名を取得
Dim name As BytePtr
Dim len As Long
Dim s As String
Dim path As String
Dim FileSize As Long
Dim dwAccessByte As DWord
len=SendDlgItemMessage(hMainWnd,ListBox1,LB_GETTEXTLEN,n,0)+1
name=malloc(len)
SendDlgItemMessage(hMainWnd,ListBox1,LB_GETTEXT,n,name)
s=MakeStr(name)
free(name)
'ファイルパスを連結し、読み込む
path=str+"\"+s
'ファイルハンドルの作成
hFile=CreateFile(path,GENERIC_READ,FILE_SHARE_READ or FILE_SHARE_WRITE,ByVal 0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0)
If hFile=INVALID_HANDLE_VALUE Then
MessageBox(hMainWnd,Ex"ファイルハンドル作成時にエラーが発生しました!","Error File Number Is "+Str$(n)+" .",MB_OK or MB_ICONWARNING)
Exit Sub
End If
'ファイルのサイズの取得
FileSize=GetFileSize(hFile,0)
LastFileSize=LastFileSize+FileSize
'領域確保
If n=0 Then
buf=malloc(FileSize+1)
Else
buf=realloc(buf,FileSize+1)
End If
'ファイルの読み込み
If ReadFile(hFile,buf,FileSize,VarPtr(dwAccessByte),ByVal 0)=0 Then
MessageBox(hMainWnd,"ファイル読み込み時にエラーが発生しました!!","Error "+Str$(n),MB_OK or MB_ICONWARNING)
MessageBox(hMainWnd,Ex"FileSize="+Str$(FileSize)+Ex"\r\ndwAccessByte="+Str$(dwAccessByte),"",MB_OK or MB_ICONWARNING)
End If
'ファイル名とサイズを記録
Open dir+"\FileInfo.txt" For Append As #1
Print #1,s+"="+Str$(FileSize)
Close #1
CloseHandle(hFile)
Next
hFile=CreateFile(dir+"\game.test",GENERIC_WRITE,0,ByVal 0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0)
If hFile=INVALID_HANDLE_VALUE Then
MessageBox(hMainWnd,Ex"ファイルハンドル作成時にエラーが発生しました!","Error File Number Is At Last",MB_OK or MB_ICONWARNING)
Exit Sub
End If
If WriteFile(hFile,buf,LastFileSize,VarPtr(dwAccessByte),ByVal 0)=FALSE Then
MessageBox(hMainWnd,"ファイル作成時にエラーが発生しました!!","Last Error",MB_OK or MB_ICONWARNING)
MessageBox(hMainWnd,Str$(LastFileSize)+","+Str$(dwAccessByte),0,0)
End If
CloseHandle(hFile)
free(buf)
MessageBox(hMainWnd,"処理終了","End",MB_OK or MB_ICONINFORMATION)