欢迎您来到芯片的主页!

Welcome to Chipset's homepage!

A file's length?

How many bytes for a specified file?
 1 
 2 #if (defined __unix__) || (defined _WIN64) || (defined _WIN32)
 3 #include <sys/types.h>
 4 #include <sys/stat.h>
 5 #else
 6 #include <fstream>
 7 #endif
 8 
 9 #if (defined __unix__)
10 
11 unsigned long long file_length(const char* file)
12 {
13   struct stat64 st;
14   int err = stat64(file, &st);
15   if(0 != err)
16     return 0;
17   return static_cast<unsigned long long>(st.st_size);
18 }
19 
20 #elif (defined _WIN32) || (defined _WIN64)
21 
22 // Microsoft has some extensions to support Unix!
23 unsigned long long file_length(const char* file)
24 {
25   struct __stat64 st;
26   int err = _stat64(file, &st);
27   if(0 != err)
28     return 0;
29   return static_cast<unsigned long long>(st.st_size);
30 }
31 
32 #else
33 
34 // the last alternative
35 unsigned long long file_length(const char* file)
36 {
37   std::ifstream fin(file, std::ios_base::in);
38   if(!fin.is_open())
39     return 0;
40   fin.seekg(0, std::ios_base::beg);
41   std::ifstream::pos_type pos_start = fin.tellg();
42   fin.seekg(0, std::ios_base::end);
43   std::ifstream::pos_type pos_end = fin.tellg();
44   return static_cast<unsigned long long>(pos_end - pos_start);
45 }
46 
47 #endif
48 

posted on 2014-03-22 15:37 Chipset 阅读(190) 评论(0)  编辑 收藏 引用 所属分类: 算法和数据结构工具平台消遣


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理