こんにちは。
C#を勉強し始めたばかりなのですが、一つの課題として、名前、家の電話番号、携帯電話番号、e-mailのデータの読み込み、追加、削除、リストの表示をハードディスク上に保存しながら扱うプログラムを作っています。
その中の、データの読み込み部分なのですが、実行すると、catch内のthrowの部分でエラーが出て強制終了してしまいます。どこがおかしいのかご教授いただけたらと思います。
環境は、MicroSoft Visual Studio 2005、言語はC#です。よろしくおねがいします。
private void Load_Click(object sender, EventArgs e)
{
Hashtable homephone = null;
Hashtable cellphone = null;
Hashtable email = null;
FileStream fs = new FileStream(file1, FileMode.Open);
try
{
BinaryFormatter formatter = new BinaryFormatter();
homephone = (Hashtable)formatter.Deserialize(fs);
cellphone = (Hashtable)formatter.Deserialize(fs);
email = (Hashtable)formatter.Deserialize(fs);
}
catch (SerializationException er)
{
this.listBox1.Items.Add("Failed to deserialize for loading items.");
this.listBox1.Items.Add("Reason: " + er.Message);
throw;
}
finally
{
fs.Close();
this.listBox1.Items.Add("Loading is done.");
}
foreach (DictionaryEntry de in homephone)
{
this.listBox1.Items.Add("" + de.Key);
this.listBox1.Items.Add("Home Phone : " + de.Value);
}
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
>>throw;の一文を削除すればいいんじゃないかと思います。
>そうなのですが、それを実行すると、次のhomephoneのところでエラーが出るのです。
>その後いじっているのですが、どうやらthrowがどうこうというよりも、ファイルの形がよくないようです。
デシリアライズで例外が起こっているのだから当たり前じゃないですか・
結合とか考えないで、ファイルに書き出す時に、上書で(1つのファイルで)保存したらどうでしょうか。
どういう風に追加の分を別ファイルで保存してやっているのかよくわからないため見当違いだったらすみません。
そうです。上書き保存をしたいのですが、うまくできなくて。
起動する→過去データのローディング→データの追加&削除→保存(過去データ&追加・削除分)
と言う流れなのですが、うまく上書きできません。
そのため、2つのファイルにそれぞれ、ローディング分、追加・削除分と書き出していました。
No.1
- 回答日時:
>catch内のthrowの部分でエラーが出て強制終了してしまいます
おかしいというより、catch 内で再スローしているからそれを外側でキャッチして処理していないのだったら例外で終了するのは当たり前だと思います。
throw;
の一文を削除すればいいんじゃないかと思います。
早速のご返答ありがとうございます。
>throw;の一文を削除すればいいんじゃないかと思います。
そうなのですが、それを実行すると、次のhomephoneのところでエラーが出るのです。
その後いじっているのですが、どうやらthrowがどうこうというよりも、ファイルの形がよくないようです。
file1は、表示したプログラムよりも前のところで
file1="c:\\Documents and Settings\\デスクトップ\\DataFile.dat";
のように指定しているのですが、アプリケーションを一旦終了し、再起動させた際に前回までのデータを保持しなければならず、file1(前回までのデータ書き込み)とfile2(新しいデータ書き込み)の2つのファイルを持たせ、後でfile1の最後にfile2をそのまま書き込ませていたのですが、そうすると、ハッシュテーブルで書き込んだデータですから後で読み込みができなくなってしまい、throwのところでエラーが出ていたようです。
この2つのファイルをうまく結合させるには、どうしたらいいのでしょうか?
考えられることとしては、もう一つfile3をつくり、それぞれfile1とfile2のデータをデシリアライズしてからfile3に書き込むことでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- オープンソース stable diffusionのインストールがうまくいきません。 1 2023/06/20 13:09
- Gmail チャットGPTの登録ができない 1 2023/03/07 02:43
- その他(プログラミング・Web制作) python fbprophetについて 1 2022/09/29 19:44
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- 英語 下記の英文を日本語に訳してください。 1 2023/03/10 13:04
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Returnに対するGoSubがありません
-
【COBOL】read文でエラー
-
gccを行ってもexeファイルが生...
-
batファイルでレジストリキーの...
-
FORTRANの実行エラーについて
-
「アクティブ ユーザーが多すぎ...
-
access テキストボックスの値取得
-
PowerShellを使って関連付けら...
-
freadでデータがない場合の読込...
-
ExcelVBAで既に開いてるwordを...
-
VB6 Dir関数で52エラー発生
-
OUTLOOK VBA 指定フォルダ内の...
-
VB実行時エラー75:「パス名が...
-
ADOを使用してExcelファイルを...
-
「パス名が無効です」の発生原因
-
エクセルVBAでパワーポイントを...
-
ADOのMoveNextでアプリケーショ...
-
Visual Studio 2005 C++で以下...
-
ASPからACCESSのOPENどうしても...
-
EXCEL VBAで複数人でのADO接続...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
gccを行ってもexeファイルが生...
-
VBでファイルが開かれているか...
-
「パス名が無効です」の発生原因
-
batファイルでレジストリキーの...
-
Returnに対するGoSubがありません
-
VBから参照できないCのDLLを使...
-
PowerShellを使って関連付けら...
-
アクセスのクエリでコンパイル...
-
VB6 Dir関数で52エラー発生
-
FTPの送信結果を検知したい
-
NAS上のファイルの使用中が解除...
-
VBA ExecuteExcel4Macro 型が一...
-
access テキストボックスの値取得
-
EXCELのVBAでWORDが開いてある...
-
すでにファイルが開かれている...
-
EXCELVBAでONEDRIVE上への保管...
-
Excelファイルのマクロによる排...
-
OUTLOOK VBA 指定フォルダ内の...
-
RAR圧縮ファイル(分割)の順番が...
-
エクセルマクロでエラーの原因...
おすすめ情報