
以下のファイルへの書込みを行なうプログラムの処理速度が極端に遅く困惑しています。
--------------------------------------------------------------------------------
/*
文字列"0,"をファイルに約2MB出力するプログラム
(2000文字で改行、1行毎にfopen&fclose)
*/
#include<stdio.h>
void main( int argc, char *argv[] )
{
FILE *fp;
for( int i = 0; i < 1000; i++ )
{
if( !(fp = fopen( "C:\hogehoge.log", "a" ) ) )
{
exit( 1 );
}
for( int j = 0; j < 1000; i++ )
{
fprintf( fp "0," );
}
fprintf( "\n" );
fclose( fp );
}
exit( 0 );
}
--------------------------------------------------------------------------------
処理時間は5分程度です。
出力する文字列を"0#"に変えると5~6秒で終了します。
カンマが入ると違うのでしょうか?
OSはWinXP、コンパイラはVC++7.0です。
原因と解決策をご存知の方、よろしくご教示下さい。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
ちなみに、バイナリモードであけて、最後尾にはfseekでディスクリプター飛ばした方が、速いと思いますよ。
変にテキスト処理をfopenにさせてるのが問題なんで。
まあ、処理時間計測するなら、各APIの呼び出しと返却毎にタイム計測して、原因特定するのが普通ですけどね。
No.4
- 回答日時:
よく見ると、
fprintf( fp "0," );
の部分もfpの後のコンマが抜けていますね。
それに、
fopen( "C:\hogehoge.log", "a" )
のとことでも、\\ではなく\になっています。
というわけで、このソースがコンパイルできる可能性は皆無です。
実際に使用したソースコードを補足してください。
この回答への補足
回答ありがとうございます。
申し訳ありません、実機ではネットができない&持ち出し不可のため質問のプログラムは手でタイプしたものです。
fopen( "C:\\hogehoge.log", "a" )
fprintf( fp, "0," );
fprintf( fp, "\n" );
の誤りです。
No.3
- 回答日時:
本当にこのプログラムで(実行時間はともかく)動いたのでしょうか?
fprintf( "\n" );の部分は、第1引数にFILE*型でストリームを指定する必要があるはずです。これがコンパイルできるということは、stdio.hが破壊されているか、全く別の(素性不明の)stdio.hがインクルードされているものと思われます。
No.2
- 回答日時:
fprintfがカンマを認識して何かしているのかなぁ。
fprintf( fp "0," );
を、
fputc('0',fp);fputc(',', fp);
に変えても速度は変わりませんか?
それと、何で1行ごとにfopen/closeしなければいけないのか理解に苦しみます。
回答ありがとうございます。
fputc()でも試しましたが同じでした。
実際作りたいプログラムはもっと煩雑です。
詳しくは申し上げませんが1行毎にfopen、fcloseを前提とした回答をお願い致します。
知りたいのは「カンマが入るとなぜファイル出力が遅いのか」ということです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイルに行番号を追加
-
複数ファイルの同時読み込みの...
-
C言語 連番データの読み込み
-
「Aに対するBの割合」と「Aに対...
-
Enterキーを押されたら次の処理...
-
Aの値からBの値を除するとは??
-
有効数字について 以前質問をし...
-
信頼区間の1.96や1.65ってどこ...
-
std::set<int> で、ある値が何...
-
20'(角度)の計算がわかりま...
-
数学で、定数aの値を求めよって...
-
do-while文が禁止される理由
-
正の数aは4の倍数で、7でわると...
-
3桁区切(コンマ)記号をつけ...
-
プログラムでの数字につく”f”の...
-
未解決の外部シンボル _printf...
-
ループを途中で抜けたいのですが。
-
エディットコントロール入力時...
-
関数におけるif文とreturn文に...
-
”あいうえお” を ”おえういあ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストファイル内に対して, ...
-
複数ファイルの同時読み込みの...
-
C言語でファイル読み書きを早く...
-
ファイル出力で改行を入れたい!
-
なぜCSQとCIP形式ではコ...
-
fopenでファイル名に、変数を使...
-
c言語でのfscanfについて
-
C言語にてXMLファイルから任意...
-
_popen() のエラー取得
-
数値のみ抽出(C言語)
-
ランダムアクセスができない
-
C言語でのCSVソートとデータ抽...
-
C言語 連番データの読み込み
-
ファイルの作成・書き込み・読...
-
fscanfでループしてしまう。
-
ファイルへの書込み処理が異常...
-
ファイルを読み込んで条件式を...
-
CSVファイルを読み込み構造体の...
-
C言語でセグメンテーションエ...
-
C言語について
おすすめ情報