🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
参照

参照は、プログラミングにおいて変数や関数といったメモリ空間上での所在を指示するデータのことを指します。その中にはデータ自体は含まれず、他の場所にある情報を間接的に指示するプログラムです。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

C#

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

Q&A

解決済

1回答

2556閲覧

ファイル出力・参照を行いたいがファイルがどこに保存されているかわからない

channi

総合スコア6

参照

参照は、プログラミングにおいて変数や関数といったメモリ空間上での所在を指示するデータのことを指します。その中にはデータ自体は含まれず、他の場所にある情報を間接的に指示するプログラムです。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

C#

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

0グッド

0クリップ

投稿2019/11/09 09:05

前提・実現したいこと

かなり初期的な質問になりますが、
ファイル出力と参照を行いたいです。

登録ボタンを押下した時、
フォームに入力した情報が出力され(すでに同ファイルファイルがある場合は上書き)
参照ボタンを押下した時、
登録したファイルを参照するという感じです。

■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

登録ボタンを押下した時、どこにファイルがあるのか、
また実際に出力が行われているのかもわかりません。。。

エラーメッセージ

該当のソースコード

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Windows.Forms;

namespace 第一回べ勉強会課題
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Button1_Click(object sender, EventArgs e) { double number; //社員番号 double name; //名前 double namekana;// 名前かな double group; //所属 double position; //役職 double gender; //性別 double dateofentercompany; //入社日 double bikou; //備考 if (double.TryParse(textBox5.Text, out number) == true && double.TryParse(textBox6.Text, out name) == true && double.TryParse(textBox4.Text, out namekana) == true && double.TryParse(comboBox1.Text, out group) == true && double.TryParse(comboBox2.Text, out position) == true && double.TryParse(comboBox3.Text, out gender) == true&& double.TryParse(dateTimePicker1.Text, out dateofentercompany) == true && double.TryParse(textBox2.Text, out bikou) == true) { using (StreamWriter writer = new StreamWriter("data.txt", true)) //書き込む先のファイル名は"data.text" { writer.Write(textBox5.Text); //社員番号 writer.Write(",");           writer.Write(textBox6.Text); //名前 writer.Write(","); writer.WriteLine(textBox4.Text); //名前かな writer.Write(","); writer.WriteLine(comboBox1.Text); //所属 writer.Write(","); writer.WriteLine(comboBox2.Text); //役職 writer.Write(","); writer.WriteLine(comboBox3.Text); //性別 writer.Write(","); writer.WriteLine(dateTimePicker1.Text); //入社日 writer.Write(","); writer.WriteLine(textBox2.Text); //備考 writer.Write(","); writer.Flush(); textBox5.Text = "";  //入力欄であるtextboxをクリア textBox6.Text = ""; textBox4.Text = ""; comboBox1.Text = ""; comboBox2.Text = ""; comboBox3.Text = ""; textBox2.Text = ""; } DateTime dt = DateTime.Now; //dtに今日の日付(と現在時刻) " data.txt".csv = dt.ToString("yyyy-MM-dd"); //textboxに文字列として"dt"をyyyy-mm-ddの日付形式で } MessageBox.Show("情報を登録しました"); } private void Button2_Click(object sender, EventArgs e) { this.Close(); } }

}

C#

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

Zuishin

2019/11/09 09:20

カレントディレクトリという言葉はわかりますか?
channi

2019/11/09 09:25

作業を行っているファイル・・・でしょうか?
Zuishin

2019/11/09 09:25

ちょっと検索してみてください。
channi

2019/11/09 09:29

調べた結果、 現在位置、現在関連付けているファイルというようなニュアンスかと受け取りました。
Zuishin

2019/11/09 09:31

ディレクトリやフォルダというのはわかりますか?
channi

2019/11/09 09:35

ファイルを入れている場所と認識しています。
Zuishin

2019/11/09 09:47

わかりました。それをふまえ、回答しました。
papinianus

2019/11/09 10:17

回答が出て今更ですが、その機能を造るのに、どこにファイルがあるか、をしる必要が本当にありますかね? 参照機能を作るのでしょう?StreamReaderに同じパスを渡してみればよいのでは?極端な話、プログラマには容易に知り得ないランダムな場所に置かれるとしても、readerとwriterで同じ実行コンテキストでpath引数に文字列として等価な実引数を渡せば同じ実体が取り出されるという約束さえわかっていれば実装可能かと思います。 どこにあるかわからないことで具体的に何が困るのでしょうか?態度としては誠実で敬意を払いますが、質問自体は課題がない質問のように思えます。
channi

2019/11/09 12:22

初心者すぎる質問になってしまっておりますが、 実際にファイル出力が行えているのかが確認できず それを確認したくこの内容の質問をさせていただきました。 参照のほうはこれから実装なので、 まずは出力を出来ているか・・・を知りたかった次第です。
papinianus

2019/11/10 00:39

初心者だからといたずらに卑下するのはやめてください。何が問題で何を解決しないといけないかです。 もし、解決すべき課題がvsでファイルを書いたときどこに生成されるかの調査、であればこのようなことは書きません。 現在のステップは理解しました。それでも今やることは参照をつくることだと考えます。 また、もし外部ツールで見ることが必要なら最初から絶対パス(C:¥から始まる形式)で書けばいいだけです。
YAmaGNZ

2019/11/10 04:28

まずはデバッガでご自身のプログラムが思い通りのルートを通っているか確認するべきかと思います。 また、変数の型を考えてみてください。
guest

回答1

0

ベストアンサー

カレントディレクトリというのは、現在のプロセスが現在使用しているディレクトリという意味です。
プロセスというのは、何かプログラムを実行したら作られる実行環境のことと思ってください。
例えば同じソフトを二回起動し、二つとも動いている場合、プロセスが二つ作られています。
そのうち一つを終了させると、プロセスは一つになります。
実行中のプログラムのことをプロセスと言うと思ってもらっても構いません。だいたいの場合はそれでほぼ間違っていません。

あなたの作成しているプログラムを実行した時、プロセスが作られます。そしてプロセスには必ずカレントディレクトリがあります。

Visual Studio から実行した場合、カレントディレクトリは実行ファイルのあるディレクトリになります。たとえば、C:\Users\channi\source\repos\Study\bin\Debug\Study.exe を実行した場合、カレントディレクトリは C:\Users\channi\source\repos\Study\bin\Debug です。

質問のコードではディレクトリを指定せず、ファイル名だけを指定してファイルが作られています。この時、ファイルはカレントディレクトリに作られます。別の場所を指定するには、作るファイルにディレクトリを含めて指定してください。

実行ファイルがどこにあるかを探すには、プロジェクトディレクトリの中で bin というディレクトリを探してください。その中をさらに探すと、作ったファイルが見つかると思います。

投稿2019/11/09 09:46

Zuishin

総合スコア28669

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

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

channi

2019/11/09 12:19

大変詳しくご回答いただきまして本当にありがとうございます。 このコーディング内容ですでに ファイル出力は行えているのでしょうか? ご教示いただきましたディレクトリに ファイルが作成されていないようでして・・・ 追加で申し訳ございませんが、 ご教示いただけますでしょうか。。。
Zuishin

2019/11/09 12:20

まず実行ファイルのあるディレクトリに作成されたファイルがあるかどうか確かめてください。
Zuishin

2019/11/09 12:28 編集

すみません。読み間違えていました。そこにファイルが無いということですね。 http://www.openreference.org/articles/view/319 ここを参考に、ファイルを書き出す時カレントディレクトリがどこになっているかを表示してみてください。 Console.WriteLine の結果は出力ウィンドウに出力されます。MessageBox.Show を使っても構いません。
channi

2019/11/09 13:29

無知ですみません。 上記URL内容試してみましたが、使い方がわかりませんでした。
Zuishin

2019/11/09 13:36 編集

using ブロックの中に次のコードを書いてください。 MessageBox.Show(System.Environment.CurrentDirectory); F5 でデバッグを開始すると、メッセージボックスが表示されます。 ここに書いてあるのがカレントディレクトリです。 そのディレクトリをエクスプローラーで開いてファイルを探してください。 みつかったら OK を押してメッセージボックスを閉じ、みつけたファイルが消えないかどうか見ていてください。
papinianus

2019/11/10 00:44 編集

横からすみません。このやりとりで問題が解決すべきことからズレているように思えてなりません。 このコードで書けていますか、にZuishin様は否定をなさっておられないです。私は書けていそうだと答えます。 書けていそうだという前提でかんがえるとその後のやり取りはカレントがどこかの確認や調べ方にシフトしていますが、それがこの質問での本質的課題でしょうか?そうであるなら質問の前提やりたいことで書いておられることは修正いただきたいです。
Zuishin

2019/11/10 00:56

ファイルをどこに作ればいいかという話であれば、AppData 内(ユーザーに無関係な場合)または Documents 内(ユーザーがアクセスすることがある場合)に作るのがいいと思います。その場合は Environment.GetFolderPath を使用して特殊フォルダを取得し、そこにサブディレクトリを作成してください。 しかしそれ以前にまずファイルの作り方がわからず試行錯誤している状態なので、読み書きメソッドを一度に実装するのではなく、また特殊フォルダの取得やサブディレクトリの作成を入れるのでもなく、純粋にファイルの作成に注力するというのは、私は賛成できます。 その場合、ファイルが正しく作成されているかどうかを確認するのはエクスプローラーで表示して既存のアプリで開くのが良いでしょう。 それをする前段階として、まずファイルがどこに作成されているのかわからないという問題が発生しているので、その問題をまず解消するのは段階として自然なのではないかと思います。 ここに提示されたコードだけ見れば、実行ファイルと同じディレクトリに作成されていそうです。しかし現実にはそこに見当たらないということなので、まず探すところから始めなければしょうがないのではないでしょうか。
Zuishin

2019/11/10 01:01

私も必要そうなところだけ見て全部を見ているわけでもなく、実際にデバッグしたわけではないのですが、ひとつ気になるのはこの部分です。 > " data.txt".csv = dt.ToString("yyyy-MM-dd"); //textboxに文字列として"dt"をyyyy-mm-ddの日付形式で これはコンパイルできないと思います。 したがって、テキストファイルが作成されるかどうかよりまず、実行できていない可能性もあります。 提示されたコードがプロジェクトに含まれていてコンパイルできているかどうかを先に調べる必要があるかもしれません。
Zuishin

2019/11/10 01:06 編集

> 補足情報(FW/ツールのバージョンなど) この補足情報が皆無ですが、OS の詳細なバージョン、使用しているツールや拡張機能すべての詳細なバージョン、使用しているフレームワーク(.NET Framework なのか .NET Core なのか、そしてその詳細なバージョン)、使用しているテンプレート(Windows フォームズアプリケーション(.NET Framework) など)を「すべて」追記してください。 バージョンの調べ方はググってください。今回の質問だけでなく、質問するときには必ずこれらを入れて質問してください。
papinianus

2019/11/10 01:33

コメントありがとうございます。 > 純粋にファイルの作成に注力する > ファイルがどこに作成されているのかわからない この点に関して質問自体への質疑で理解したつもりです。だとしてもそれへの回答は、絶対パス指定、特にあげていただいたEnvironment.GetFolderPathで得た、予め分かっているところに書くこと、だと考えます。書いた→どこに書いたか調べる→見つけた、というアドホックなデバッグ向きのやり方は、ファイルの作成を試行錯誤する段階で取るべきステップだとは思えないです。ここに書こうとした(設計)→書いた(実装)→確認(テスト)、で学ぶほうが好ましいのではないでしょうか。 脇道の発言失礼しました。
Zuishin

2019/11/10 03:21

それが理想ですね。回答本文でもちょっとだけ触れてますが。 気になるところを全部指摘したりこちらで書いたりすると、今あるコードが影も形もなくなるので自重しました。
Zuishin

2019/11/10 03:23

それと、作ったテキストファイルが消えるのは本当にパスのせいなのかという疑問もあります。
YAmaGNZ

2019/11/10 03:30 編集

ファイルが作成されていないというのは、氏名とかをdouble.TryParseしてそもそもファイルの作成を行ってないのでは?
Zuishin

2019/11/10 03:39

確かに。よく見ると if 文の中にありますね。
channi

2019/11/10 04:38

すみません。。。 いろいろアドバイスいただきまして・・・ ◎コードを見やすくするためにマークダウンを行う。 ◎バージョンなどもっとしっかり記載する(しっかり調べます) ◎if文の中にあるのがおかしいんじゃないか・・・ この質問内容を直接編集で変えるなどは出来ないようなので 試行錯誤で改めて質問する形を取らせていただきます。 みなさん、本当にありがとうございます。 特にZushinさん、こちらのレベルに合わせて親切にお答えいただけて ありがとうございます。
Zuishin

2019/11/10 04:39

できますよ。編集ボタンを押してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問