ファイルサイズの取得

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

ファイルサイズの取得

#1

投稿記事 by shiro4ao » 11年前

ファイルサイズを取得したくて以下の様なコードを書いたのですが、
2.1GBくらいのファイルまではうまく取得できるのですが
3.1GBのファイルを開いてみたら-1095716864と出てきて、
明らかにうまく取得できませんでした。
どこがおかしいのでしょうか・・・・

コード:

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

DWORD FileSize(char *name){
	HANDLE hFile;
	DWORD size;
	hFile = CreateFile(name , GENERIC_READ, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
	size = GetFileSize( hFile, NULL );
	CloseHandle( hFile );
	return size;
}

int main(int argc,char* argv[]){
	printf("size=%d",FileSize(argv[1]));
	getch();
}

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

Re: ファイルサイズの取得

#2

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

printfが符号付きの%dだからです。%uを使ってください。
intとDWORDは同じ32bitで、int型なら最上位ビットは符号部です。

前トピックもお忘れなく。
「【雑談】シェアウェアになるには • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3&t=11255
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
shiro4ao
記事: 224
登録日時: 13年前
住所: 広島

Re: ファイルサイズの取得

#3

投稿記事 by shiro4ao » 11年前

前回のトピック、雑談ですが、一応解決にしておきました。
ありがとうございます。

%uで出力させたら正しい値が出てきました。
なかなか厄介ですね。
すみません。

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

Re: ファイルサイズの取得

#4

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

shiro4ao さんが書きました:前回のトピック、雑談ですが、一応解決にしておきました。
ありがとうございます。

%uで出力させたら正しい値が出てきました。
なかなか厄介ですね。
すみません。
整数型の数値の精度とかは基本的な問題ですので、アプリを作る上でちゃんと勉強されたほうが良いでしょう。
「整数型 - Wikipedia」
http://ja.wikipedia.org/wiki/%E6%95%B4% ... 0%E5%9E%8B
「BohYoh.com-C/C++ FAQ 整数型が表現できる値の範囲を教えてください。」
http://www.bohyoh.com/CandCPP/FAQ/FAQ00046.html

あと4GBオーバーを考慮していないは今のソフトとして問題がある気がします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
shiro4ao
記事: 224
登録日時: 13年前
住所: 広島

Re: ファイルサイズの取得

#5

投稿記事 by shiro4ao » 11年前

かなり問題が多いことは認識しています。
大きなファイルサイズだと不具合が起きたり、ゼロ除算が平気で起こったり、
64bit時代にもかかわらずWOW64で動いてたり。
修正しないといけない部分が多すぎます。

シェアウェアの計画はもろくも崩れ去ったので(笑)
ちゃんと動くアプリケーションを作れるように頑張ります。

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

Re: ファイルサイズの取得

#6

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

WOW64で動いているのは問題ないと思います。
と言うより、OSとして32bit/64bit混在の現在では64bit専用はそれなりのスピードの優位性が無い限り作る意味は無いと私は思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

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