添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

#define _FILE_OFFSET_BITS 64
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>

long long get_file_size(const char *filename)
{
struct stat buf;
if(stat(filename, &buf)<0)
{
return 0;
}
return (long long)buf.st_size;
}

long long ftell_test(const char *d)
{
FILE *fp;
off_t l;

fp = fopen(d, "r");
fseek(fp, 0L, SEEK_END);
l = ftello(fp);
fclose(fp);
return l;
}

int main(void) {
printf("%lld B/n", get_file_size("/opt/public/rhel-server-5.4-i386-dvd.iso"));
printf("%lld B/n", ftell_test("/opt/public/rhel-server-5.4-i386-dvd.iso") );
printf("%d /n", sizeof(long long) );
printf("%d /n", sizeof(off_t) );

return 0;
}

有两种方法,

一种是用 ftello, 一种是用stat函数。

重要的是要加上 #define _FILE_OFFSET_BITS 64

但是这两个函数对块设备文件,计算的结果不一致。

字符设备好像是一样的。

#define _FILE_OFFSET_BITS 64#include #include #include long long get_file_size(const char *filename){        struct stat buf;        if(stat(filename, &buf)        {
先说点题外话, 最近某模块缩容, 导致单机任务堆积, 超过 2G ,  fopen就失败了。 开始怀疑是 文件 权限问题, 但排查后, 发现不是, 但依然找不到原因, 后来某哥敏锐地发现, 文件 的值在 2G 左右, 于是怀疑这里有问题, 于是上网一查, 果然如此。         我不写了, 直接转载网上文章描述这个问题, 转载地址:         http://blog.163.com/qimo60
C语言 获取 超大 文件 超过 2G )大小的功能 昨天在使用fseek及 ftell 获取 大小 超过 2G 文件大小 时发现 ftell 获取 到的值为-1,即便其返回值类型定义为long long还是为-1. 经过查阅文档才发现,针对超大 文件 有新的函数可以 获取 文件大小 。 fseeko64 和 ftell o64两个方法结合就能得出 文件 正确的大小了。 使用方式如下: off64_t get File Size(char * file Path) { FILE *f; f = fopen( file Path, "rb");
一般而言,用C的 FILE 操作 文件 ,只能支持到 2G 大小, 超过 2G 将不能fseek ftell (因为int最大到 2G )。 windows下可以更换fseek函数和 ftell 函数 将fseek换成_fseeki64 (注意下划线) 将 ftell 换成_ ftell i64 (注意下划线) 然后偏移量如果大于 2G ,则用__int64 类型的数据即可 要输出__int64类型的变量,可以用printf(...
最近在做视频编解码时遇到使用fseek无法定位到一个大于 2G 文件 尾,由于自己功底不扎实,百思不得其解,请教大神后得知在VC平台下使用_fseeki64可以解决问题,然而自己傻乎乎的在 获取 文件 指针位置的地方依旧使用的 ftell ,中途调试N久也没结果。恍然醒悟后,将 ftell 改成和_fseeki64对应的_ ftell i64即可。 TIPS: 1.当 文件 小于 2G 时,使用fseek和 ftell 可以获
公司的asterisk系统已经发生了两次crash,检查日志,都是在日志 文件 写满到 2G 后自动执行转储时,日志还在写继续写入而导致的。google以后,发现了下面这边文章,赞! 解决了 文件大小 限于 2G 的问题,转帖到自己的空间保留。 突破Linux上面 ftell 函数 2G B的 文件大小 限制 http://www.demix.cn/h?z=28507 在       32 位元的 Linux 上
#include int stat(const char *restrict pathname, struct stat *restrict buf); 提供 文件 名字, 获取 文件 对应属性。 int fstat(int file des, struct stat *buf); 通过 文件 描述符 获取 文件
public class Split File { public static void main(String[] args) { File file = new File ("input File .txt"); int partCounter = 1; int sizeOf File s = 1024 * 1024 * 2;// 2MB byte[] buffer = new byte[sizeOf File s]; try ( File InputStream fis = new File InputStream( file ); BufferedInputStream bis = new BufferedInputStream(fis)) { int bytesAmount = 0; while ((bytesAmount = bis.read(buffer)) > 0) { //write each chunk of data into separate file with different number in name String file PartName = String.format("%s.%03d", file .getName(), partCounter++); File new File = new File ( file .getParent(), file PartName); try ( File OutputStream out = new File OutputStream(new File )) { out.write(buffer, 0, bytesAmount); } catch (IOException e) { e.printStackTrace();