FindFirstFile関数を実行すると実行時エラーが出る

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
MoNoQLoREATOR
記事: 284
登録日時: 14年前
住所: 東京

FindFirstFile関数を実行すると実行時エラーが出る

#1

投稿記事 by MoNoQLoREATOR » 13年前

単刀直入に、次のプログラムを実行すると10回中10回とも実行時エラーが出ます。

コード:

#include <stdio.h>
#include <windows.h>

typedef unsigned int uint;

int main(){
	HANDLE hFind = FindFirstFile("text.txt", NULL);
	uint size = GetFileSize(hFind, NULL);
	FindClose(hFind);
	printf("%d\n", size);
}
FindFirstFile関数のところで落ちています。
この事象について検索してみたところ、スタックオーバーフローが原因だったという過去スレッドを発見しましたが、このプログラムでスタックオーバーフローが起きることはまずないと思います。
私には原因がさっぱりわかりません。

原因・解決方法がわかる方はいらっしゃいませんか?
また、これ以外の方法でファイルサイズを取得する方法はありますか?

よろしくお願いします。

Ryo

Re: FindFirstFile関数を実行すると実行時エラーが出る

#2

投稿記事 by Ryo » 13年前

FindFirstFileが返すのは、「ファイル検索ハンドル」
GetFileSizeに引き渡すのは「ファイルハンドル」

GetFileSizeに引き渡すべきものが間違っている

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: FindFirstFile関数を実行すると実行時エラーが出る

#3

投稿記事 by みけCAT » 13年前

lpFindFileDataがNULLなのはやばいのではないでしょうか?
http://msdn.microsoft.com/ja-jp/library/cc429233.aspx

WIN32_FIND_DATA構造体にファイルサイズが入っているようです。
http://www.hozugawa.net/winapi/struct_W ... _DATA.html
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
MoNoQLoREATOR
記事: 284
登録日時: 14年前
住所: 東京

Re: FindFirstFile関数を実行すると実行時エラーが出る

#4

投稿記事 by MoNoQLoREATOR » 13年前

返信ありがとうございます。

>>Ryoさん
別物でしたか。
調べてみました。
CreateFileという関数で取得したハンドルがファイルハンドルにあたるようです。
しかし、開くだけでも”Create”とは…。
Openfileという関数が既に使われていたからこのような名前になったという説があるようですね。

>>みけCATさん
た、たしかにそうですね。
NULLポインタに対して書き込みが行われることになりますからね。
使わないからNULLでも入れておこうという考えでした。
やはりWIN32_FIND_DATA構造体に格納されていましたか。
FindFirstFile関数を以前使った時にその情報からサイズ取得できたような気がするんだけどなーなんて考えていたのですが見つけられませんでした。(ちょうどそのページを見たんですけれどね。流し読みはよくないですね)
CreateFile関数を使うよりFindFirstFile関数を使う方が簡単そうだと感じたので、そちらを使う予定です。

解決しました。ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る