4

私は、WIN2000 以降のすべてのバージョンの Windows で実行する必要があり、ワイド ファイル パスで動作する必要があるいくつかのコードに取り組んでいます。

statファイルの長さを取得するには、 のバリアントを呼び出す必要があります。ファイルは 4GB を超える可能性があります。

MSDN Visual Studio .NET 2003 [1] ドキュメントの関連セクションを次に示します。

int _stat(
   const char *パス、
   struct _stat *バッファ
);
int _stat64(
   const char *パス、
   struct __stat64 *バッファ
);
int_stati64(
   const char *パス、
   struct _stati64 *バッファ
);
int _wstat(
   const wchar_t *パス、
   struct _stat *バッファ
);
int _wstat64(
   const wchar_t *パス、
   struct __stat64 *バッファ
);
int _wstati64(
   const wchar_t *パス、
   struct _stati64 *バッファ
);

[1] http://msdn.microsoft.com/en-us/library/14h5k7ff(v=VS.71).aspx

__stat64構造と構造の違いがわかりません_stati64_wstat64orを使用したいことはわかっていますが、MSDN はどちらが優れ_wstati64ているかについて沈黙しています。

助言がありますか?

4

3 に答える 3

5

#include以下は、mingw wchar.hファイルの __stat64 および _stati64 構造です。

#定義されている場合 (__MSVCRT__)
構造体_stati64 {
    _dev_t st_dev;
    _ino_t st_ino;
    unsigned short st_mode;
    短い st_nlink;
    短い st_uid;
    短い st_gid;
    _dev_t st_rdev;
    __int64 st_size;
    time_t st_atime;
    time_t st_mtime;
    time_t st_ctime;
};

#if __MSVCRT_VERSION__ >= 0x0601
構造体__stat64
{
    _dev_t st_dev;
    _ino_t st_ino;
    _mode_t st_mode;
    短い st_nlink;
    短い st_uid;
    短い st_gid;
    _dev_t st_rdev;
    __int64 st_size;
    __time64_t st_atime;
    __time64_t st_mtime;
    __time64_t st_ctime;
};

これらの構造によると、次の理由_stat64よりも良い選択のようです。stati64

  1. st_modeであり_mode_t、そうではないunsigned short
  2. 時間はでは_time64_tなくとして表現time_tされるため、NTFS ファイル システムで表現できる範囲と同じであり、32 ビットのtime_t.

私はまだ混乱していますが、これは正しい答えに近いようです。

が>を_stat64必要とすることにも注意してください。これは、より現代的であることを意味します。MSVCRT_VERSION0x0601

于 2011-07-04T17:31:31.153 に答える
3

100% 確実ではありませんが、次のように思われます。

  • stat: 32 ビットのタイムスタンプ、32 ビットのファイルサイズ
  • stat64: 64 ビットのタイムスタンプ、32 ビットのファイルサイズ
  • stati64: 64 ビットのタイムスタンプ、64 ビットのファイルサイズ

したがって、必要になりますwstati64

これは、MSDN の次の段落からのものです。

ファイルの日付スタンプは、それが 1970 年 1 月 1 日午前 0 時以降で、UTC の 2038 年 1 月 18 日 19:14:07 より前である_stat64場合_wstat64に表すことができます。 :59:59、3000 年 12 月 31 日、UTC。

st_size ファイルのサイズ (バイト単位)。_stati64andの 64 ビット整数_wstati64

于 2011-07-04T03:24:52.683 に答える
1

ドキュメントには次

最初の数値サフィックス (32または64) は、使用される時間型のサイズを示します。2 番目の接尾辞はi32またはi64のいずれかで、ファイル サイズが 32 ビットまたは 64 ビットのどちらの整数で表されるかを示します。

于 2011-07-04T03:26:44.660 に答える