電子書籍の厳選無料作品が豊富!

DLLで外部のファイルサイズを得る関数を作っています。
C言語は書きながら覚えていこうとしているのですが、
どうしても分からない点がありました。
ソースをここに正しく書ける自信がないので日本語を含めて大体で書きます。
いろいろなサイトのコピペです。

double __stdcall filesize(){
HANDLE hFile;
DWORD size;
hFile = CreateFile( _T(絶対パス, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
size = GetFileSize( hFile, NULL );
CloseHandle( hFile );
return(size);
}

このような感じで書いていて最後にretuenでファイルサイズを正しく得ることができました。
この絶対パスは環境によって変わるので引数にしようと考えました。
そしてfilesize()の中にどのように記述すればいいかで躓いています。

filesize(絶対パス){
char pass[] = "絶対パス";
hFile = CreateFile( _T(pass, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );

こんな感じで書ければいいのですがC言語はポインタや文字列の扱いが難しいですね。
初歩的なことで申し訳ありませんがよろしくお願いします。

A 回答 (2件)

古いC言語の仕様しか知りませんが、


\は\\と書けばいいはずです。

char systemdir[] = "c:\\windows\\system32";

てな感じで。

それから、

filesize(絶対パス){
char pass[] = "絶対パス";

と言う書き方って、良かったんだったかな?
はっきりと覚えていないですが、普通は

filesize(char *pass){
hFile = CreateFile( _T(pass, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );

でいいと思います。
これだと、文字列(パス名)の先頭アドレスのみfilesize関数に渡ることになります。
    • good
    • 0
この回答へのお礼

ポインタにまだ慣れていなくて良く理解できていません。
基礎を固めます。回答ありがとうございます。

お礼日時:2008/12/08 03:07

const char *arg とかで文字列ポインタとして渡せば?



あと
char pass[] = "絶対パス";
ってなにをしようとしてるの?
やるなら
strcpyとかじゃないの?

関係ないけど
GetFileSizeの返り値DWORDなのにdouble型?
仕様見た?MSDN見た?
2byte無駄にする意味がわからない

対処療法じゃなくて基本からやり直したほうがいいと思いますぅ
    • good
    • 0
この回答へのお礼

const char *arg
でできました。
ありがとうございます。

お礼日時:2008/12/08 03:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!