質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

4回答

4322閲覧

ファイルの書き込みエラー

ryohasegawa

総合スコア437

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2016/05/02 13:52

編集2016/05/03 06:16

アプリケーション開発をしていて、アプリケーションを閉じる前にXMLファイルにデータを保存し、開くと読み込むようにしてあり、はじめは動いていたのに急に動かなくなりました。
XMLファイルを自分で編集して、開いてみると正常に読み込まれて表示するので、書き込みプログラムに異常があるのと思います。

C#

1private void Form1_FormClosed(object sender, FormClosedEventArgs e) 2 { 3 //お気に入りを書き込む 4 List<FavoriteData> favoritedatalist = new List<FavoriteData>(); 5 for(int i = 0; i < listfavorite.Items.Count; i++){ 6 favoritedatalist.Add((FavoriteData)listfavorite.Items[i]); 7 } 8 XmlSerializer serializer = new XmlSerializer(typeof(List<FavoriteData>)); 9 using (StreamWriter writer = new StreamWriter("favorite.xml", false, Encoding.UTF8)){ 10 serializer.Serialize(writer, favoritedatalist); 11 } 12 }

プログラムはこれなんですがエラーが出ません。教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

自己解決

関数が有効範囲に入ってなかったため、実行されていなかった

投稿2016/05/05 03:20

ryohasegawa

総合スコア437

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

シリする関数が実行範囲に入ってなかったため動作していなかっただけでした

投稿2016/05/03 12:02

ryohasegawa

総合スコア437

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんにちは。

書き込みと読み出しで指定しているファイルの位置が異なるのだと思います。
書き込みは「カレント・フォルダ」へ書き込んでますので、カレントが変わると別の位置へ書き込んでしまいます。
カレント・フォルダは「ファイルを開く」ダイアログ等で簡単に変わりますので注意が必要です。

対策ですが、フル・パスでリード/ライトすれば確実なのですが、それでは特定のユーザしか使えません。
もし、保存したいフォルダがユーザのディスクトップであれば、そのパスを調べてリード/ライトすると良いです。
デスクトップ等の特殊ディレクトリのパスを取得するが参考になります。

投稿2016/05/02 14:05

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryohasegawa

2016/05/02 14:11

保存ファイルの保存場所は正常に作動してくれます。ファイルに上書き保存してくれないので、閉じてしまうとデータが消えてしまいます。
Chironian

2016/05/03 07:54

> 保存ファイルの保存場所は正常に作動してくれます。 これはどのようにして確認されましたでしょうか? もし、空のfavorite.xmlができるのであれば、favoritedatalistの内容を確認してみて下さい。 もし、favorite.xmlが消えてしまうのであれば削除しています。ryohasegawaさんのプログラムのどこかでDeleteしているはずでので、心当たりを探って見て下さい。 その他の方法でしたら、その詳細を書かれると回答できるかも知れません。
guest

0

絶対パスで書いたら?

投稿2016/05/02 13:56

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryohasegawa

2016/05/02 14:03

絶対パス?何を絶対パスで書けばいいんでしょう?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問