以下のファイルへの書込みを行なうプログラムの処理速度が極端に遅く困惑しています。
--------------------------------------------------------------------------------
/*
文字列"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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- C言語・C++・C# C言語のファイル入力が分かりません 2 2022/05/22 06:35
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
C言語でファイル読み書きを早くしたい。
C言語・C++・C#
-
1行ずつではなくまとめてファイル出力したいのですが
C言語・C++・C#
-
ファイル書込みで一行もしくは部分的に上書きする
PHP
-
-
4
system関数がうまくいかない
C言語・C++・C#
-
5
[VB.NET] 処理の高速化を行いたい。
Visual Basic(VBA)
-
6
fopne で失敗する原因
C言語・C++・C#
-
7
あるディレクトリ内のファイルをファイル名でソートして取得
C言語・C++・C#
-
8
処理負荷特定で考えられる要因について
C言語・C++・C#
-
9
Windows10におけるUSB-RS232C機器との接続について
ドライブ・ストレージ
-
10
C言語---ファイルに出力したデータをすべて消去する方法
C言語・C++・C#
-
11
WNetAddConnection*()の使い方
Visual Basic(VBA)
-
12
ファイルの途中に文字列を挿入
C言語・C++・C#
-
13
C++言語で、構造体のコピーは可能(しても良い)のでしょうか?
C言語・C++・C#
-
14
C言語におけるファイル読み込みor書き込みの高速化がうまくいかない
C言語・C++・C#
-
15
c言語でcsvファイルの処理で、処理速度が速いプログラムを書こうと思っ
C言語・C++・C#
-
16
C++ 構造体の一括初期化 {0}
C言語・C++・C#
-
17
バッチ処理 特定の文字以降をリネーム
Ruby
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSVファイルの内容を構造体に格...
-
c言語でのfscanfについて
-
fgets( ) の返り値は何?
-
複数ファイルの同時読み込みの...
-
fopenでファイル名に、変数を使...
-
c言語 ファイルから数字を読み...
-
ファイルが読み込めない・・・
-
fread()エラー
-
自己相関関数を求めるプログラ...
-
C言語でセグメンテーションエ...
-
漢字を配列に入れたいのですが
-
Winsockの通信処理にてファイル...
-
C言語にてXMLファイルから任意...
-
ファイル出力で改行を入れたい!
-
辞書順にソートしたいのですが...
-
C言語でのCSVソートとデータ抽...
-
C言語でファイル読み書きを早く...
-
ファイルへの書込み処理が異常...
-
テキストファイル内に対して, ...
-
エラーがわかりません、、
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数ファイルの同時読み込みの...
-
ファイルへの書込み処理が異常...
-
C言語でファイル読み書きを早く...
-
c言語でのfscanfについて
-
fopenでファイル名に、変数を使...
-
ファイル出力で改行を入れたい!
-
C言語にてXMLファイルから任意...
-
CRC32の計算方法
-
fgets( ) の返り値は何?
-
InternetReadFileを使ったファ...
-
【C言語】ファイルを読み込んで...
-
VisualStudioでのファイルの入...
-
commons-netでのFTP送信について
-
日本語ファイル名のFTPについて
-
fgets関数の利用 c言語
-
C言語でコマンドmvを実行
-
「コマンドライン引数チェック...
-
C言語でセグメンテーションエ...
-
構造体のメンバにファイルポイ...
-
エラー C2664
おすすめ情報