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

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

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

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

Q&A

解決済

2回答

2925閲覧

C# CSVやEXCELを読み込むアプリを配布

sobue

総合スコア329

C#

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

0グッド

1クリップ

投稿2016/09/05 12:10

編集2016/09/05 12:45

###前提・実現したいこと
自作アプリを配布する。
その際にCSVを読み込みと出力とExcelの出力をしている。
その2つのファイルの保存場所が依存しないように一つのパッケージとして配布したい。

###発生している問題・エラーメッセージ
そもそも、読み込みや出力自体されない

###該当のソースコード

C#

1String f = System.Windows.Forms.Application.StartupPath+"\\test.csv"; 2 3 // csvファイルを開く 4 using (System.IO.StreamReader sr = new System.IO.StreamReader(f, System.Text.Encoding.GetEncoding("shift_jis"))) 5 { 6 // ストリームの末尾まで繰り返す 7 while (!sr.EndOfStream) 8 { 9 // ファイルから一行読み込む 10 String line = sr.ReadLine(); 11 // 読み込んだ一行をカンマ毎に分けて配列に格納する 12 String[] values = line.Split(','); 13 14 15 int tabooYear = int.Parse(values[1]); 16 //年忌の計算とリストの作成 17 taboTable = tabooTable(tabooYear); 18 19 ArrayList keys = new ArrayList(taboTable.Keys); 20 keys.Sort(); 21 22 if (readCount == 0) 23 { 24 //DataGridViewに年数を出力する 25 yearOut(Convert.ToString(keys[0])); 26 27 readCount++; 28 } 29 30 DataGridViewTextBoxColumn nameColumn = new DataGridViewTextBoxColumn(); 31 nameColumn.Name = values[0]; 32 dgv.Columns.Add(nameColumn); 33 34 //DataGridViewの年数を確認して対象の年に年忌を入れる 35 for (int i = 0; i < dgv.RowCount - 1; i++) 36 { 37 foreach (int taboo in keys) 38 { 39 if (dgv[0, i].Value.Equals(Convert.ToString(taboo))) 40 { 41 dgv[dgv.ColumnCount - 1, i].Value = Convert.ToString(taboTable[taboo]); 42 43 } 44 } 45 46 } 47 48 49 } 50 }

###試したこと
ファイルの隣に置いたりもともとファイルの置いてあった場所は試しました。あと、配布アプリ作成と同時にできたApplication Filesというフォルダにも入れてみたがだめだった。
###補足情報(言語/FW/ツール等のバージョンなど)
Visual Studio 2015

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

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

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

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

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

guest

回答2

0

ベストアンサー

まずはエラー内容の特定からです。
どこまで到達しているのかを把握するために各地にデバッグログを仕込みましょう。
例としては
using (System.IO.StreamReader sr = new System.IO.StreamReader(f, System.Text.Encoding.GetEncoding("shift_jis")))
{
MessageBox.Show("読み込みok");
// ストリームの末尾まで繰り返す
while (!sr.EndOfStream)
{
MessageBox.Show("ファイルの中に何かは入っているようだ");



nameColumn.Name = values[0];
MessageBox.Show(string.Format("名前:{0}", value[0]));

等など、気になるところに片っ端からログ出力を埋め込みましょう。
今回はWindowsのGUIアプリケーションとお見受けしたので手っ取り早く確認するためにMessageBoxで書いてみましたが、ちゃんとやるならConsole.Writeや独自のログ出力関数を作ってやる方がいいです。

投稿2016/09/08 06:41

ishi9

総合スコア1294

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

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

sobue

2016/09/11 09:37

ありがとうございます。解決しました。
guest

0

まずは一行目のString fにどんな値が入るのかプリントまたはブレイクして参照するなりしましょう。
そして出力されるfの値(ファイルパス)と実際に配置したファイルのパスが正しいことを確認してください。

投稿2016/09/06 02:57

omochi

総合スコア410

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

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

sobue

2016/09/06 03:15

すみません、リリースしたexeファイルでデバッグできるのですか?できるのであれば方法をご教示下さい。
omochi

2016/09/06 03:35 編集

ログファイルやコンソール出力でトレース・解析してください
sobue

2016/09/06 11:47

開発用のものでは読み込みは確認できます。配布用にすると読めなくなります。
omochi

2016/09/07 02:11

そもそもファイルが読み込めていないのであれば例外が発生しcatchしていなのであれば停止すると思いますがその辺どうなっていますか? スタックトレースを見れば何が悪いのかもわかると思いますが
sobue

2016/09/11 09:36

ありがとうございます。解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問