ファイルオープンせずにファイルサイズを知る方法 – プログラミング – Home

ファイルオープンせずにファイルサイズを...
 
通知
すべてクリア

ファイルオープンせずにファイルサイズを知る方法


としお
 としお
(@としお)
ゲスト
結合: 19年前
投稿: 1
Topic starter  

こんにちは

CreateFileやCFileのOpen関数を呼ばずに、
ファイルのファイルサイズを知る方法というのは、
あるのでしょうか?
GetFileSizeは、CreateFileしたときのファイルハンドル
が必要で、オープン処理を入れずに、
ファイルサイズを知りたいのです。
FindFirstFileで取得したファイルハンドルを
GetFileSizeに渡してもファイルサイズの取得に
失敗しました。
どなたか、ファイルオープンせずにファイルサイズを知る
方法をご存知の方は、ご教授願います。

開発環境は、
VC++.NET
WindowsXP
MFC
です。


引用解決済
トピックタグ
YuO
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

> FindFirstFileで取得したファイルハンドルを
> GetFileSizeに渡してもファイルサイズの取得に
> 失敗しました。

FindFirstFileを使ったなら,特殊な状況を除いてファイルサイズは取得できています。
WIN32_FIND_DATA::nFileSizeHighとWIN32_FIND_DATA::nFileSizeLowをチェックしてくだ
さい。
ちなみに,FindFirstFileで得られるのは検索用のハンドルであって,
ファイルオブジェクトを操作するためのハンドルではありません。

ちなみに,「特殊な状況」というのは,対象ファイルがリパースポイントの場合です。
この場合,サイズが0バイトとして報告されてしまうため,
実際に開いてみないことにはファイルサイズは取得できません。
# リパースポイントのEA_DATAには元々データは記録されていない

とりあえず,Vistaが出るまでは,ファイルでリパースポイントなんてことは滅多にない
でしょう。
# ディレクトリで,というのはマウントポイントとして簡単に作成できるが……
ただし,Vista以降ではCreateSymbolicLinkというAPIがあるため,
状況が一変する可能性があります。
http://msdn.microsoft.com/library/en-us/fileio/fs/createsymboliclink.asp


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

ちなみに CFile クラスの 静的メンバ関数の GetStatus ならば、
ファイル名だけて、CFileStatus 構造体が取得できます。
# 内部ではFindFirstFile関数を使っていますけど。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

新ファイルを作成せずに一度「CreateFile」
すればいいんじゃないでしょうか。
「CreateFile」をしてはいけない理由があるんでしょうか。


返信引用
ん
 ん
(@ん)
ゲスト
結合: 23年前
投稿: 106
 

_stat() とか。


返信引用
ん
 ん
(@ん)
ゲスト
結合: 23年前
投稿: 106
 

CFile::GetStatus() とか。


返信引用
dark
 dark
(@dark)
ゲスト
結合: 20年前
投稿: 12
 

>CFile::GetStatus() とか。

既出
>ちなみに CFile クラスの 静的メンバ関数の GetStatus ならば


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました