之前在写一个文件下载工具,我负责写的是服务端,客户端给定一个时间戳,然后服务端进行扫描符合当前时间戳的所有文件,但是随着测试发现一个问题就是获取大文件出现异常,由于考虑不周全,之前获取文件大小使用的方法是:
long GetFileSize(CString filePath)
{
if (_stat(&st, filePath) == 0)
return 0;
return st.st_size;
}
上面这种方法只是用于小文件,当获取一个大文件的时候就应该用下面的方法了:
#include <sys/stat.h>
BOOL GetFileAttributes(struct _stati64 *st, CString filePath)
{
wchar_t *wchar = (wchar_t *)malloc(sizeof(wchar_t) * 1024);
MultiByteToWideChar( CP_ACP, 0, filePath, strlen(filePath)+1, wchar, sizeof(wchar_t) * 1024/sizeof(wchar[0]) );
if(0 != _wstati64(wchar, st))/*pFileName是文件的路径*/
{
free(wchar);
return FALSE;
}
free(wchar);
return TRUE;
}
例如调用的时候:
struct _stati64 st;
GetFileAttributes(&st, "C:\\123.txt");
下面来说一下:_stati64 这个结构体原型:
#if _INTEGRAL_MAX_BITS >= 64
struct _stati64 {
_dev_t st_dev;
_ino_t st_ino;
unsigned short st_mode;
short st_nlink;
short st_uid;
short st_gid;
_dev_t st_rdev;
__int64 st_size;
time_t st_atime;
time_t st_mtime;
time_t st_ctime;
};
#endif
该结构体在STAT.H文件中定义的。重要的几个成员变量是文件大小:st_size;创建时间:st_ctime 修改时间:st_mtime 最近访问时间:st_atime
好了,今天就将文件属性的获取以及获取大文件就介绍到这里,如果有什么不懂或者我哪里讲错了的请及时联系: 新浪邮箱:chao_song2011@sina.cn 不胜感激!!!