VB2005にてDateTimeをファイルに書き込みしました。
これをC++(アンマネージドC++)で読みたいのですが
ファイル内がどうなってるかわかりません。
なんとかC++のfreadで書き込み値を読み出し
日時情報を取得したいのです。
都合で書き込み側はプログラム変更できません。
なんとか読み込み側のプログラム変更のみで
日時情報を読めないでしょうか?
((書き込み側))
Public Structure DateData
Public dt As DateTime
End Structure
この構造体をByte配列に変換して
バイナリファイルに書き込みしてます。(8バイト)
((読み込み側))
freadで読みたいが書き込んだ8バイトを見ても意味がわからない
DateTimeはA.D. (西暦紀元) 0001 年 1 月 1 日の午前 00:00:00 からの
100ナノ秒単位の数らしいですが、書き込まれた値はそうは見えません。
VB2005で読み込みするとちゃんと読めます。
> この構造体をByte配列に変換して
> バイナリファイルに書き込みしてます。(8バイト)
これをどのようなコードでやっているかによるでしょう。
> これをどのようなコードでやっているかによるでしょう。
構造体DateDataの実体を
Marshal.StructureToPtrでIntPtrに変換し、
Marshal.Copyでバイト配列にコピーしてます。
できたバイト配列をBinaryWriteのWriteで書いています。
DateTime の中身がわからないので、中身を直接バイナリダンプするようなことはやらな
いほうがいいでしょう。
.NET Framework の実装が変わったときに誤動作する可能性があります。
> DateTimeはA.D. (西暦紀元) 0001 年 1 月 1 日の午前 00:00:00 からの
> 100ナノ秒単位の数
が欲しいなら Ticks プロパティで取得できますから、これをファイルに書き込んだほう
がいいです。
が、この値から年月日を求めるのは面倒くさそうですので、少々手間でも、年月日時分秒
(必要であればミリ秒等も)を個別にファイルに書き込むのがよいのではないでしょう
か。
書き込み側を触れない状況なのでなんともできませんが
機会があれば書き込み側を修正しようと思います。
ありがとうございました。