如何获得大于4 Gb的文件大小?

kam*_*mpi 10 c windows filesize

我做了一个简单的函数,它获得了文件的大小.

int file_size( char * filename )
{
     int size;
     struct stat st;

     stat( filename, &st );
     size = st.st_size;

     return size;

}//file_size
Run Code Online (Sandbox Code Playgroud)

它工作正常,但如果我有一个大于4Gb的文件比我得到一个否定号码,当然这不是正确的文件大小.那我怎么能得到如此大的文件大小?我认为,返回值应该是其他任何像int但我不知道什么,我不认为,这将解决我的问题.

谢谢,

kampi

更新:

嗨!

我找到了解决方案.我必须使用__stat64.我修改了我的功能,现在它正在检索实际大小.我用8Gb大文件测试了它.

unsigned long long int file_size( char * filename )
{
    unsigned long long int size;
    struct __stat64 st;

    __stat64( filename, &st );
    size = st.st_size;

   return size;

}//file_size
Run Code Online (Sandbox Code Playgroud)

并通知:

当我使用printf时,我不得不使用"%I64d"将其打印出来.

Ker*_*ido 5

您可以使用Win32 GetFileSizeEx功能.

HANDLE aFile = CreateFile
(
  filename,
  FILE_READ_ATTRIBUTES,
  0,
  NULL,
  OPEN_EXISTING,
  FILE_ATTRIBUTE_NORMAL,
  NULL
);

if (aFile != INVALID_HANDLE_VALUE)
{
  long long aSize;
  GetFileSizeEx(aFile, &aSize);

  CloseHandle(aFile);
  return aSize;
}
else
  return -1;
Run Code Online (Sandbox Code Playgroud)


小智 5

您可能可以使用_stat64