- ベストアンサー
std::ifstreamについての質問
- std::ifstreamを使用してファイルをバイナリモードで展開しようとすると、フルパスを指定すると展開に失敗します。
- ファイルが存在しているかどうかはウィンドウにドロップされたファイルを基にして判断できます。
- 解決方法をご教示いただける方、よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
関連するQ&A
- std::ifstreamについて
#include <iostream> #include <fstream> int main( int argc, char** argv ) { if( argc == 1 ) return -1; std::ifstream ifs( argv[1] ); if( ifs.is_open() == false ) return -1; return 0; } C++で上記のようなコードを書いてコンパイルし、出来上がった実行ファイルにアスキーフォーマットのテキストファイルをドロップしたのですが、どうしてもファイルの展開が成功しません。 確認したところ、一応argv[1]には正しいフルパスのファイル名が入っていました。 なぜファイルの展開に失敗するのでしょうか? よろしくお願いします。 /* WindowsXP Professional32bit Core2Duo 2.44GHz VisualStudio2005 Academic Edition VisualStudio2008 Academic Edition */
- ベストアンサー
- C・C++・C#
- C++のifstreamの使い方
C++のifstreamの使い方で分からない所があるので、分かる方御教示ください。 下記は、C++で読み込んだファイルの中身が空だった場合を無理やり例外処理を使って書いてみたのですが、中身が存在する場合、たとえば、 line1 line2 line3 ではline1を無限に繰り返してしまいます。(1)を ifstream instream = inStream(argv[1]); while (instream >> input) にするとうまくいくようなのですが、この違いがよくわかりません。 違いを教えてください。 #include <iostream> #include <string> #include <fstream> using namespace std; ifstream inStream(char *str); int main(int argc, char *argv[]) { if (argc < 2) cout << "ファイル名を指定してください" << endl; else { try { string input; while (inStream(argv[1]) >> input) // (1) cout << input << endl; } catch (int i) { cerr << argv[1] << "を開けません" << endl; } } return 0; } ifstream inStream(char *str) { ifstream inStream(str); if (!inStream) throw 1; return inStream; }
- ベストアンサー
- C・C++・C#
- ファイルサイズを変更したい
visualstudio2010を使用しています。 c言語で書いているのですが、 test.txt ←abcdefg ファイルサイズ1KB Wtest.txt←書き込み用ファイル 上記のようなファイルがあり、バイナリでtest.txtを読み込みWtest.txtに書き込みたいと思っています。 その際に、1KBのtest.txtを5KBになるまでバイナリで「abcdefg」の後に0を代入したいのですがどう書けば良いのかわかりません。 FILE *fp, *fpw; char *fname = "test.txt"; char *fname_w = "Wtest.txt"; unsigned char buf[10000]; int size; fp = fopen( fname, "rb" ); if( fp == NULL ){ printf( "%sファイルが開けません\n", fname ); return -1; } fpw = fopen(fname_w, "wb"); if(fpw == NULL){ printf( "%sファイルが開けません\n", fname_w ); return -1; } size = fread( buf, sizeof( unsigned char ), sizeof (fp), fp ); /*ここに処理を追加したい*/ fwrite( buf, sizeof( unsigned char ), size, fpw);
- ベストアンサー
- C・C++・C#
- ファイルの出力先がうまく指定できません。。
今、ファイルの出力先を変更させたいと思っていて、 調べたところ、fp=fopen("フォルダ名/test.txt","wb") のようにすればよい、というところまでは調べたのですが、 私の場合、ファイル名を、filenameというchar型の変数に入れており、 fp=fopen(filename,"wb")となってます。 これを、fp=fopen("フォルダ名/filename","wb")としてみたのですが、 これではダメでした。 ファイル名の入っている変数はそのまま使いたいのですが、 それでパス指定をする方法ありますでしょうか?
- ベストアンサー
- C・C++・C#
- バイナリ形式でデータの入出力をしたい
STLやstringが規格化されていない時代の古いC++の本しか持っていない私の唯一の教科書はマイクロソフトのライブラリだけなのですが時々どこに必要な事項が載っているか探しきれないことがあります その1つとして バイナリデータを読み出したり書きこんだりするにはどうするかということです バイナリファイルinfile.exeの読み出のためのファイルとの接続として ifstream ifs; ifs.open("infile.exe",ios::in|ios::binary); としバイナリファイルoutfile.exeの読み出しのためのファイルとの接続として ofstream ofs; ofs.open("outfile.exe",ios::out|ios::binary|ios::trunc); としましたがこれは正しいやり方なのでしょうか? もし不備があれば指摘してください とくにファイル名の次のモードについて指摘していただければ幸いです (なかでもios::truncが心配)
- ベストアンサー
- C・C++・C#
- 固定幅フィールドのテキストデータをifstreamを使って読み込む方法
固定幅フィールドのテキストデータをifstreamを使って読み込む方法 について教えてください。 計算結果の出力ファイルに1行につき8カラム、20カラム、10カラムのデータがあるとします。 例えば 1.2345671.2345678912345678911.23456789 このデータ行には 1.234567(8カラム幅) 1.234567891234567891(20カラム幅) 1.23456789(10カラム幅) の3つの固定小数点の数字が書かれています。 上記例のように3つ(複数)の数字が必ずしもホワイトスペース区切りにはなっていないものとします。 これをC++標準ライブラリのifstream や stringstreamを用いて読み込む場合、どのような記述をしなければならないのでしょうか? たとえば、 int main(int argc, char** argv) { double data[3]; char buf[BUFSIZ]; ifstream ifs( argv[1] ); // argv[1] には上記データが書かれたファイル名が入っているとします。 stringstream str; while( !ifs.eof() ) { if( !ifs.getline( buf, BUFSIZ, '\n' ) ) break; str << buf; str >> setw(8) >> data[0] >> setw(20)>> data[1] >> setw(8) >> data[2]; } cout << data[0] << " " << data[1] << " " << data[2] << endl; return 0; } のような書き方だと、以下のように出力されてしまい、幅を指定しているsetw()が効いていません。 1.23457 0.234568 0.234568 恐らく、'.'がセパレータとして使われて読み込まれているものと思います。 sscanf( buf, "%8lf%20lf%10lf", &data[0], &data[1], &data[2] ); を使うしか方法が無いのでしょうか? 開発環境は ubuntu上のg++ 4.4.3 です。
- 締切済み
- C・C++・C#
- デスクトップにfopen()したい(C言語)
#include <stdio.h> int main(){ FILE *fp; fp = fopen("デスクトップのパス\\ファイル名","w"); fclose(fp); return 0; } のようにして、デスクトップ上にファイルを作成したいと思ってます。 どうすればデスクトップのパスが取得できますか?教えてください!
- ベストアンサー
- C・C++・C#
- バイナリで書き込みましたがエラーが出る。原因は?
拡張子を.wavとしてあるa.wavというファイルがあります。 fopenとfread関数を用いて以下のように読込み、 fp = fopen("a.wav","rb"); fread(data[0],4,1,fp); fopenとfwriteを用いてb.wavファイルに以下のように書き込みました。 fa= fopen("b.wav","wb"); fwrite(data[0],4,1,fa); 書き込んだb.wavファイルですが、 バイナリエディタStirlingでa.wavとb.wavファイルの中身を比較したら中身は同じでした。 しかし、a.wavファイルでは音が出力されるのに、b.wavファイルでは音が出力されずエラーが出ます。 この原因はいったいなんでしょうか? 原因がわかる方がいましたら教えていただけないでしょうか? よろしくお願いいたします。
- ベストアンサー
- C・C++・C#
- fread関数の使い方がわかりません。
以下のプログラムで試しているのですが、コンパイルはできても各配列の要素が表示されません。なぜなんでしょうか? #include<stdio.h> main() { FILE *fp; int i,b[10]; char a[10]; gets[a]; //ファイル名を指定 fp = fopen(a,"rb"); //バイナリモードでオープン fread(b,3,10,fp); //配列に3byteづつ書き込んだつもり for(i=0;i>=9;i++){ printf("%02x\n",b[i]); //この部分の表示がされない。 } fclose(fp); } レベルの低い質問ですいませんがよろしくお願いします。
- ベストアンサー
- C・C++・C#