dirent.hについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
太郎S

dirent.hについて

#1

投稿記事 by 太郎S » 13年前

ディレクトリ内のファイル名を取得するプログラムを、C言語とDxLibを使い作ろうと思い、以下のコードを実行してみました

コード:

#include "DxLib.h"
#include "dirent.h"

int WINAPI WinMain( HINSTANCE,HINSTANCE, LPSTR,int ){
	ChangeWindowMode( TRUE ), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK );

	DIR* dir;
	struct dirent* dp;
  
	if (NULL == (dir = opendir("./"))){
		DrawString( 0,0, "ディレクトリを開けませんでした", GetColor( 255,255,255 ) );
		exit(1);
	}
  
	for(int i = 0; NULL != (dp = readdir(dir)); i++){
		DrawFormatString( 0, 20*i, GetColor(255,255,255), "%d:%s\n" , i , dp->d_name);
	}
  
	closedir(dir);

	ScreenFlip();
	WaitKey();

	DxLib_End();
	return 0;
}
するとエラー
main.obj : error LNK2019: 未解決の外部シンボル _closedir が関数 _WinMain@16 で参照されました。
main.obj : error LNK2019: 未解決の外部シンボル _readdir が関数 _WinMain@16 で参照されました。
main.obj : error LNK2019: 未解決の外部シンボル _opendir が関数 _WinMain@16 で参照されました。
C:\Documents and Settings\USER \My Documents\Visual Studio 2008\Projects\test\Debug\test.exe : fatal error LNK1120: 外部参照 3 が未解決です

projectと同じ階層にdirent.hとdirent.libを置いたのに何がいけないのでしょうか?
まだプログラム初心者でVC++EE2008もよく使い方を分かっていませんが、エラーの原因を指摘してもらいたいです。宜しくお願いします。

アバター
へにっくす
記事: 634
登録日時: 13年前
住所: 東京都

Re: dirent.hについて

#2

投稿記事 by へにっくす » 13年前

エラーは、リンカのエラーです。
エラーの解決策は
プロジェクト設定で、追加のライブラリにdirent.libを書くか、
#pragma comment(lib, ファイルパス)
とソースに直接書くかです。

詳しくはググってくださいね


dirent.h、dirent.libは自分で作成したモノですか?
そうでないなら、わざわざプロジェクトのフォルダにコピーする必要はありません。
written by へにっくす

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: dirent.hについて

#3

投稿記事 by softya(ソフト屋) » 13年前

Unix/Linux風のopendirを使わなければdirent.libは必要ないのでは?
WindowsならFindFirstFile、FindNextFileで代用することができます(ファイルも列挙されるのは問題ですが)。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

太郎S

Re: dirent.hについて

#4

投稿記事 by 太郎S » 13年前

へにっくすさんありがとうございます
 プロジェクトの設定からライブラリ追加したところ、前のエラーは無くなりましたが別のエラーが出てきました
再定義やら何やら・・・DxLibと一緒には使えないのかなぁ

ソフト屋さんありがとうございます。
 FindFirstFileを使用するとエラーが・・・

コード:

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE,HINSTANCE,LPSTR,int){
	ChangeWindowMode( TRUE ), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK );

	WIN32_FIND_DATA fd;
	char* dir = "*.*";
	HANDLE h;
	int i=0;

	h = FindFirstFile(dir, &fd);

	do {
		DrawFormatString(0,20*i,GetColor( 255,255,255 ), "%s", fd.cFileName);
		i++;
	} while(FindNextFile(h, &fd));

	FindClose(h);

	ScreenFlip();

	WaitKey();

	DxLib_End();
	return 0;
}
error C2664: 'FindFirstFileW' : 1 番目の引数を 'char *' から 'LPCWSTR' に変換できません。
error C2664: 'DxLib::DrawFormatString' : 4 番目の引数を 'const char [3]' から 'const TCHAR *' に変換できません。
申し訳ありませんがこのエラーの原因を教えてもらえたら幸いです・・・

nil
記事: 428
登録日時: 14年前

Re: dirent.hについて

#5

投稿記事 by nil » 13年前

プロジェクトの設定から文字コードをマルチバイトに設定してください。

太郎S

Re: dirent.hについて

#6

投稿記事 by 太郎S » 13年前

涼雅さんありがとうございます
 できました!設定していたと思ったら設定されていなかっただけでした、みなさんありがとうございます!

閉鎖

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