• 締切済み

C++ ファイルの入出力

C++ ファイルの入出力 テキストファイル(ノートパッド)の入出力について勉強しています。プログラムを一通り書いてデバッグした所、何のエラーもありませんでした。しかしテキストファイルを開くことができません。ファイルが存在しないときのために「I/O error」のメッセージを表示するようにしてあるんですけど、プログラムを動かすとそのメッセージが出ます。自分の書いたプログラムが悪いのかと思い、教科書にある例題をコピーして動かしても同じ結果です。プログラム自体は何の問題ないのにテキストファイルがリンクしません。ちなみにファイルの場所は指定していません。なのでcppファイルがあるところと同じところにテキストファイルを置いています。これで動くはずなんですが動きません。どこにテキストファイルを置けばいいのでしょうか?もし必要なら私が書いたコードも載せます。回答よろしくお願いします。

  • jjww
  • お礼率0% (0/1)

みんなの回答

回答No.1

> cppファイルがあるところと同じところにテキストファイルを置いています。  開発環境が書かれてないので一概に言えませんが、これでは動くはずはありません。  ファイルのパスが指定されていない時はカレントディレクトリにアクセスしますが、大抵の場合は実行ファイルの存在するディレクトリです。「VC++」などでは実行ファイルはcppなどのソースファイルとは別の場所に実行ファイルが作成されます。  もっとも、カレントディレクトリが実行ファイルのあるディレクトリであるとは保証されていません。例えばショートカットを作成するときに作業フォルダを指定すれば、そこがカレントディレクトリになります。動作を確実にするのであれば、きちんとパスを指定する必要があります。

関連するQ&A

  • 独習Cのファイル入出力の章について(長めです)

    独習Cで勉強をしています。ファイルの入出力のところでわからなくなってしまいました。 ファイルを開くときはfopenを使うとあり、下記の説明があります。 FILE  *fopen(char *ファイル名, char *モード)  また、ファイル型は構造体という説明があります。 fopenはsdtio.hを使うとあります。 しかし実際の例題では FILE *fp; if ((fp = fopen("myfile","r"))==NULL) { printf("ファイルを開く際にエラーが発生しました\n"); 略 わからないところは次の点です。 fopenはポインタなのでしょうか。stdio,hを使えば良いとあるのに、なぜファイル型の宣言をしなければならないのでしょうか。また例題ではfopenはファイル型として宣言していませんがなぜこれでよいのでしょうか。 例題にある fpというのは特別な意味がある関数またはコマンドなのでしょうか。 FILE型とはどのような型なのでしょうか。int型やchar型はイメージできましたが、FILE型は想像できません。 以上わからないことだらけです。宜しくお願いします。 ほんとうに独習で勉強しています。独習Cより独習に適している教科書があったら、その紹介もお願いします。

  • c言語:ファイルの入出力

    2つの行列をファイルから読み込み、その積をファイルに出力するプログラムを 作りたいのですが、参考書を読んでもよくわからないので教えて頂きたいです。 テキストファイルの文字列のコピーなどは、参考書を見てできたのですが、 ファイル入出力を使った数値の計算がいまいち理解できませんでした。 注意点は以下の通りです。 ・ファイルはカンマ区切りのテキストファイルとし、入力ファイルはエクセルで作成。拡張子は.csv。 ・ファイル名はキーボードから入力できるようにする。 よろしくお願いします。

  • ファイルの入出力に関して

    ファイル入出力の部分なんですが FILE *input,*input2,*input3; input=fopen("070921\10.txt","r"); input2=fopen("070921\20.txt","r"); input3=fopen("070921\30.txt","r"); 以下省略.  上記のようなプログラムに関して,フォルダの070921とテキストファイルの10,20,30の部分をコマンドライン上で入力させてひとまとめでデータを読み込みたいと考えています.  gets関数を用いて,プログラムの一部を以下のように作成してみたのですが入力に手間がかかります. char fin[80]; gets(fin); input=fopen(fin,"r"); 以下省略. 何か良い方法があれば教えてもらえないでしょうか.

  • ファイル入出力をサーブレットで・・・

    JAVAのオーソドックスなファイル入出力のサンプルを改造して、サーブレットにしようと思ったのですがうまくいきませんでした。 まず手始めに、コンソールアプリケーションとして、”abc"と言う内容のabc.txtを吐き出すサンプルを試しました、これはうまくいきました。 その後で、それをそのままサーブレットに組み込み、リクエスト時にファイルの出力ができるか試してみたのですが、どうもどこにも出力されていない用です。 サーブレットへのアクセスが失敗しているのかとおもい、サーブレットのプログラムの最後にhtmlに出力させるコードを書いてみたところ出力されましたので、プログラムそのものにはアクセスしているようです。 やりたいことというのは、htmlのtextareaからpostでおくって、サーバーにtxtファイルとして保存する・・・ということです。

    • ベストアンサー
    • Java
  • C++ visualstudio グローバル変数

    C++のプログラミングに関する質問です。 visual studio2008を使用しています。 手元に非常に複雑なC++ファイルなどから構成されている1つのprojectがあります。(ヘッダファイルなどもあります) そのため、このprojectをデバッグすると、A.cppファイルをデバッグ→B.cppファイルをデバッグ→A.cppファイルをデバッグ→C.cppファイルをデバッグのように、色々なcppファイルを跨ってデバッグします。 1つのcppファイルには大量の関数があり、cppファイルの先頭や,関数外の部分に例えばA.cppで int test などと宣言すれば、A.cppファイル内ではtestと名付けた変数をすべての関数で使えます。 しかし、あくまでA.cppファイル内だけで使用できるだけで、別のBやC.cpp内で使うことはできません。 このtest変数をB.cppやC.cppファイルでも使えるようにするにはどうすればいいでしょうか? 上で挙げた例でいうなら、A.cppからB.cppファイルに移動する際の関数の引数として渡す方法は考えられますが、実際には、 test変数を使いたいのはかなり後に登場するcppファイルで関数の引数として扱うのは非常に大変です。 (Z.cppでtest変数を使いたい。しかしZ.cppに到達するまでにはA~Y.cppを通り、その間に登場するすべての関数でtestを引数にしなければならない) 関数の引数でtest変数を使えるようにする以外の方法がありましたたら教えていただけると幸いです。 実際にやりたいことは A.cpp内にある関数が実行されたらその数をカウントし(A.cppのこの関数は何度も呼び出される関数) //count ++ このcount++の値によってZファイルのある関数での動作を変えたいと思っています。 if(count<100){ printf("aaa"); } しかし、現状ではZ.cppファイル内ではcountが定義されていないので上のようなif文を書くとエラーになってしまいます。

  • ファイルの入出力について

    猫 犬 豚 象 鳥 上記のようなテキストファイルを読み込んで 猫犬豚象鳥 のように1行にしてファイルに書き込むプログラムをつくりたいのですがうまくいきません、、 最初whileとfgetcをつかってEOFまで読み込んでfputcでかきこんだのですが この方法だと改行してしまったので whileのなかにif(c!='\n') をいれて改行コードならかきこまないようにしたのですが 実行してみると 猫■犬■豚■象■鳥 となります 実際にできたファイルの■はこれより小さいもので そのままここに貼り付けると 猫 犬 豚 象 鳥 となります。 改行コードを読み飛ばす方法わかるかたいたら 教えてください

  • エラーが出て、ファイルが開けません。

    ファイルの種類は.doc、word2007で作ったファイルです。 同じUSBに入っている他のファイルは開くことができますが、そのファイルだけ開くことができません。 エラーメッセージでは 「この文書を読み取ることができませんでした。 ファイルが壊れているようです。次の操作をおこなってください: *ファイルを開いて、修復してください。 *テキスト回復コンバータでファイルを開いてください。 (開けないファイル名) と表示されています。 メッセージの操作は一通り試しました。 なお、マイクロソフトサポート技術情報の記事916145を参照するように書かれていたので、それもすべて試しました。 ちなみに独断で違うプログラムから開こうとしましたが、メモ帳・ワードパッドともに失敗しました。 また、壊れているファイルはUSBから他の場所へコピーすることができませんでした。 この他に、できることがあればぜひ教えてください。

  • ファイル入出力で

    現在ファイル入出力の項目をしているのですが、以下の内容で実行すると エラーが出てどうしても実行できません。主にどこを直せばいいのでしょうか? /* ファイルをコピーするプログラム */ #include <stdio.h> int main(void) { FILE *fin, *fout; char infile[40], outfile[40]; char str[256]; printf("コピー元ファイル = "); scanf("%39s", infile); printf("コピー先ファイル = "); scanf("%39s", outfile); if( (fin = fopen(infile, "r") ) == NULL) { printf("Input file open error.\n"); return 1; } if( (fout = fopen(outfile, "w") ) == NULL) { printf("Output file open error.\n"); fclose(fin); return 1; } while(fgets(str, sizeof(str), fin) != NULL) { fputs(str, fout); } fclose(fin); fclose(fout); return 0; } エラーは FILE 、fin, fout,NULLの未定義です。 よろしくお願いします。

  • 【至急:C言語】cppファイルやhファイルなどテキストファイルのステッ

    【至急:C言語】cppファイルやhファイルなどテキストファイルのステップ数を求めるプログラムに関して。 ファイルパスを標準入力させ、fopen()で開きます。その場合、選択されたファイルがテキストファイルでない場合の例外処理はどうすればできるでしょうか?テキストファイルといっても、冒頭に挙げたcpp, hのほかにtxt, ini, datなどさまざまです。fgets()などの関数を使ってステップを数えられるファイルを正常処理の対象とするプログラムを考えています。(できるだけ短い時間で多くの回答をいただきたく、Yahoo知恵袋でも同様の質問を投稿させていただいております)

  • C++のstringクラスとファイルの入出力について

    C言語では入出力はfopen,fcloseなど, 文字列の扱いも,char型の配列にfgets…なんとなく使いづらかったので, C++のstringクラスが便利だと聞き,勉強しています。 主にネットで"string 配列 入出力"などで検索しながら探しています。 自分で作成したデータファイル"ex.txt"を読み込み, 用意した配列"data[i]"に代入して,その後色々処理をしたいと思います。 //ex.txt A 2 0 1.0 B 1 2 10.0 C 1 0 100.0 という,"名前 番号1 番号2 数値データ"という4つの情報を"data[i]"に入れ,for文でA~Cまで配列を作りたいです。 後に,名前と番号,数値を切り離して処理したいです。 とりあえず某サイトを見よう見まねで以下のプログラムを書きました。 #include <fstream> #include <string> #include <iostream> using namespace std; int main(){ ifstream ifs( "ex.txt" ); string str; ifs >> str; cout << str << endl; return 0; } Visual C++のコンソールアプリケーションでデバッグなしで実行させると 単に,"A"と一文字しか出力されませんでした。 正直,動作もなにもわからず書いただけです。 C++のstringクラスを用いて,先の"ex.txt"の内容を, ファイルから読み込んで,画面に表示させるプログラムを教えてください。 よろしくお願いします。