Windows では、Evernoteをインストールすると API もインストールされ、vba 経由でアクセスできます (たとえば)。
各メモはその「リソース」(添付ファイルと画像) を表示でき、実際のリソースはバイト配列として取得できます。
バイト配列を実際のファイルに書き込むのに問題があります。
変数の宣言:
Dim fileByte() As Byte
Dim nt As enapiLib.Note
データを取得します:
fileByte = nt.Resources.Item(i).Data
バイト配列をファイルに書き込みます:
Function WriteByteArray(vData As Variant, sFileName As String, Optional bAppendToFile As Boolean = False) As Boolean
Dim iFileNum As Integer, lWritePos As Long
Debug.Print " --> Entering WriteByteArray function with " & sFileName & " file to write."
On Error GoTo ErrFailed
If bAppendToFile = False Then
If Len(Dir$(sFileName)) > 0 And Len(sFileName) > 0 Then
'Delete the existing file
VBA.Kill sFileName
End If
End If
iFileNum = FreeFile
Debug.Print "iFileNum = " & iFileNum
'Open sFileName For Binary Access Write As #iFileNum
Open sFileName For Binary Lock Read Write As #iFileNum
If bAppendToFile = False Then
'Write to first byte
lWritePos = 1
Else
'Write to last byte + 1
lWritePos = LOF(iFileNum) + 1
End If
Put #iFileNum, lWritePos, vData
Close #iFileNum
WriteByteArray = True
Exit Function
ErrFailed:
Debug.Print "################################"
Debug.Print "Error handling of WriteByteArray"
Debug.Print "################################"
FileWriteBinary = False
Close iFileNum
Debug.Print Err.Description & "(" & Err.Number & ")"
End Function
exeファイルでやってみた
各バイト値を debug.printing することにより、バイト配列が他のすべての exe ファイルと同様に 4D 5A で始まることがわかります
Resource (1) :
ClickToSetup.0.9.8.1416.exe
application/x-msdownload
Le fichier C:\Dropbox\TestEvernote\ClickToSetup.0.9.8.1416.exe doit être créé.
Lbound(fileByte) = 0
Ubound(fileByte) = 5551919
i = 0
filebyte(i) = 4D
i = 1
filebyte(i) = 5A
バイト配列に作成されたexeファイルを読み返すことで、新しく作成された配列が必要に応じてバイト4D 5Aで始まることがわかります
しかし、ハード ドライブに存在する exe ファイルは_破損_しており、_正しいバイト数で_開始されません_:
ハードドライブに保存されたファイルの最初のバイナリ値は次のとおりです: (VBinDiff ツールから取得) (画像を投稿できません。ここでは初心者です...): exe の VBinDiff 出力
実際のデータの前にこれらの 12 バイトがあるのはなぜですか??