Fopenでファイルを開くには?

解決


EST  2006-01-27 13:54:49  No: 60553  IP: 192.*.*.*

if(( fin = fopen("C:test.txt","r")) == NULL)
{
  printf("fileopenError\n");
  exit(1);
}
以上の文で開けるとおもっていたのですがエラーも何もでず、開始時に落ちてしまいます。
どうしてでしょうか?

編集 削除
「」  2006-01-27 14:00:19  No: 60554  IP: 192.*.*.*

"C:test.txt" -> "C:\\test.txt"では?

編集 削除
EST  2006-01-27 14:04:36  No: 60555  IP: 192.*.*.*

「」様の指定どおりに以下のエラーが発生しました
test.exe の 0x004125fc でハンドルされていない例外が発生しました : 0xC0000005: 場所 0x0000000c を読み込み中にアクセス違反が発生しました。 。

編集 削除
YuO  2006-01-27 14:16:39  No: 60556  IP: 192.*.*.*

ファイルがどうこうよりも,NULLポインタを逆参照したとか,そういう問題がありそうです。

まずはどこで問題が起きているのかを切り分けましょう。
mainの最初にブレークポイントを置いてステップ実行していけば,
問題が起こる場所はわかると思いますが。

編集 削除
EST  2006-01-27 14:22:02  No: 60557  IP: 192.*.*.*

YuO様ありがとうございます。
ブレークポイントを置いてステップ実行した結果がこの部分のエラーです。
これ以前の構文ではエラーは発見されませんでした。

編集 削除
Blue  2006-01-27 14:40:44  No: 60558  IP: 192.*.*.*

こういうときは
エラーが起こりうる最小のコードで試すのが鉄則です。

#include <stdio.h>
#include <stdlib.h>

int main( void )
{
    FILE* fin;

    if ( ( fin = fopen( "C:\\test.txt", "r" ) ) == NULL )
    {
        printf( "fileopenError\n" );
        exit( 1 );
    }
    fclose( fin );
    
    return 0;
}

だけにしても同様のエラーがでますでしょうか?
でなければ問題はここではないようですが。

編集 削除
EST  2006-01-27 15:06:14  No: 60559  IP: 192.*.*.*

Blue様ありがとうございます。
どうも違う部分がエラーの原因のようです。
どんどんわからなくなりました。
#include "stdafx.h"

#define ORIGBUFSIZ  1024
#define COMPBUFSIZ  1040

FILE *fin, *fout;

unsigned long origsize, compsize;
unsigned char origbuf[ORIGBUFSIZ];
unsigned char compbuf[COMPBUFSIZ];

void error(char *msg)
{
    fprintf(stderr, "Error: %s\n", msg);
    exit(1);
}

void do_compress()
{
  fout=fopen("C:test.gz","rb");
  while (1) {
        origsize = fread(origbuf, 1, ORIGBUFSIZ, fin); 
        if (origsize == 0) {
            fwrite(&origsize, sizeof origsize, 1, fout);
      printf("圧縮終了");
            break;
        }
        compsize = COMPBUFSIZ;
    compress(compbuf, &compsize, origbuf, origsize);
        fwrite(&compsize, sizeof compsize, 1, fout);
        fwrite(compbuf, compsize, 1, fout);
    printf("圧縮中・・・");
    }
}

void main()
{
  if((fin = fopen("C:test.txt","r"))==NULL)
  {
    printf("fileopenError\n");
    exit(1);
  }
  do_compress();
    fclose(fin);
    fclose(fout);
}

編集 削除
Blue  2006-01-27 15:09:37  No: 60560  IP: 192.*.*.*

とりあえず、まともにみていないけど
>     fout=fopen("C:test.gz","rb");
>    if((fin = fopen("C:test.txt","r"))==NULL)
はわざと?

編集 削除
EST  2006-01-27 15:13:06  No: 60561  IP: 192.*.*.*

はい。わざとです。

編集 削除
Blue  2006-01-27 15:17:26  No: 60562  IP: 192.*.*.*

いや
> "C:test.txt" -> "C:\\test.txt"では?
の指摘を受けた上で、なぜそのように書くのかということです。

>     fout=fopen("C:test.gz","rb");

     fout=fopen("C:\\test.gz","rb");
だし

>    if((fin = fopen("C:test.txt","r"))==NULL)

    if((fin = fopen("C:\\test.txt","r"))==NULL)
と直して、ソースを載せてもらいたかったということ。

編集 削除
EST  2006-01-27 15:23:29  No: 60563  IP: 192.*.*.*

Blueさまご指摘ありがとうございます。確かにそうですね。
ちょっとわからなくてテンパりぎみですみません。

編集 削除
tetrapod  2006-01-27 15:28:19  No: 60564  IP: 192.*.*.*

いや別に C: のカレントディレクトリの test.txt を開きたいのかもしれないし
ツッコミ方向としてはちょっと違うような気がします。
# それが原因であろうことはほぼ間違いないと思われるが...

編集 削除
Blue  2006-01-27 15:29:22  No: 60565  IP: 192.*.*.*

> compress
はVC(6では)で標準でないようですが、どこぞのライブラリを使っているのでしょうか?

それと、今頃ですが、環境を明示しておきましょう。

OS:
VCのVersion:
プロジェクトの種類:
その他のライブラリ情報:

編集 削除
EST  2006-01-27 15:32:01  No: 60566  IP: 192.*.*.*

OS:XPPRO
VCのVersion:.NET
プロジェクトの種類:Win32コンソールアプリ
その他のライブラリ情報:zlibライブラリ

編集 削除
EST  2006-01-27 15:33:36  No: 60567  IP: 192.*.*.*

どうにか完走するようになりましたがファイルを書き込んでくれないです。
どんどん方向性がずれていって申し訳ありませんorz

編集 削除
「」  2006-01-27 15:37:53  No: 60568  IP: 192.*.*.*

fout=fopen("C:test.gz","rb");

    fout=fopen("C:\\test.gz","wb");
では?

編集 削除
EST  2006-01-27 15:43:25  No: 60569  IP: 192.*.*.*

fout=fopen("C:\\test.gz","wb");
に変更したらファイルを出力するようになりました。
ありがとうございます。

編集 削除
Blue  2006-01-27 15:49:21  No: 60570  IP: 192.*.*.*

>     fout=fopen("C:test.gz","rb");
> は
>    fout=fopen("C:\\test.gz","wb");
> では?
本当だ。。。全然きづかなかなった。 orz

編集 削除
EST  2006-01-27 15:57:23  No: 60571  IP: 192.*.*.*

fout=fopen("C:test.gz","wb");
から
fout=fopen("C:\\test.gz","wb");
への変更と
fout=fopen("C:\\test.gz","rb");
から
fout=fopen("C:\\test.gz","wb");
への変更でどうにかなりました。
皆様ありがとうございました。

編集 削除