プロが教えるわが家の防犯対策術!

VB6にて作成された固定長ファイルをC#で読み込み、保存を行いたいです。
いろいろとサイトを回ってみて、FilePutのサンプルを見つけました。
そちらを元にFilePutをFileGetに変更すればいいのではないかと思ったのですがエラーとなってしまいます。
開発環境 windowsXP SP3 VisualStudio2010
<VB6ソース>
-------標準モジュール------------
Type typStrc
SaveLong1 As Long
SaveInt1 As Integer
SaveInt2 As Integer
SaveInt3 As Integer
End Type

Public ABC As typStrc
--------------------------------
------フォーム内-----------------
Private Sub Command1_Click()
Dim intFNo As Integer
Dim RLn_ABC As Integer

intFNo = FreeFile(0)
RLn_ABC = Len(ABC)
Open App.Path & "\Save.dat" For Random As #intFNo Len = RLn_ABC

ABC.SaveLong1 = 5000
ABC.SaveInt1 = 100
ABC.SaveInt2 = 200
ABC.SaveInt3 = 300

Put #intFNo, 1, ABC

Close #intFNo
End Sub
----------------------------------

<C#ソース>
参照設定で「Microsoft.VisualBasic」を追加。
----------------------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.VisualBasic;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
struct Strc
{
int SaveLong1;
short SaveInt1;
short SaveInt2;
short SaveInt3;
}

public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
int FNo = FileSystem.FreeFile();
Strc ABC = new Strc();

FileSystem.FileOpen(FNo, @"C:\\Save.dat", OpenMode.Random, OpenAccess.Default,
OpenShare.Default, Strings.Len(ABC));

FileSystem.FileGet(FNo, ABC, 1);

FileSystem.FileClose(FNo);
}
}
}
----------------------------------
「FileGet」のところで実行前のVisualStudio上でエラーとなってしまいます。
固定長データの読み込み方法についてお教え頂けませんでしょうか。

A 回答 (1件)

FileGetのどのオーバーロード使うかを明示しないといけないでしょう



今回の場合
FileGet(Int32, ValueType, Int64 )
を使うようにしないといけませんので

// ValueTypeとstruct Strucを関連付ける
ValueType val = ABC;

FileSystem.FileOpen(FNo, @"C:\\Save.dat", OpenMode.Random, OpenAccess.Default, OpenShare.Default, Strings.Len(ABC));
FileSystem.FileGet( FNo, ref val, 1 );
FileSystem.Close( FNo );

// 読み込んだデータを実体変数にコピー
ABC = (Struc)val;

といった具合でしょう
    • good
    • 1
この回答へのお礼

ご回答頂きありがとうございます。
なるほど、どのオーバーロードを使うかはこのように指定するのですね。
大変勉強になりました。
ValueTypeというのがちょっとまだ理解できていないので勉強してみます。
すごく勉強になりました。ありがとうございます。

お礼日時:2010/11/16 15:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!