您的位置:首页 > 编程语言 > C语言/C++

C/C++多种方法获取文件大小

2015-12-30 07:52 573 查看

C 如何得到文件的大小

先用fopen打开文件,然后把文件指针指向文件尾.

再用ftell获得文件指针当前位置(即文件长度).

源代码:

#include "stdafx.h"

#include <stdio.h>

#include <iostream>

using namespace std;

int main()

{

FILE* fp = NULL;

int nFileLen = 0;

fp = fopen("c:/Test.txt", "rb");

if (fp == NULL)

{

cout << "can't open file" << endl;

return 0;

}

fseek(fp,0,SEEK_END); //定位到文件末

nFileLen = ftell(fp); //文件长度

cout << "file len = " << nFileLen << endl;

return 0;

}

C++获得文件大小的方法

#include <iostream>

#include <io.h>

#include <sys/stat.h>

#include <afx.h>

#define _AFXDLL

using namespace std;

void main()

{

// 此文件在工程打开状态下为不可访问

char* filepath = "..//test.ncb";

// 方法一

struct _stat info;

_stat(filepath, &info);

int size = info.st_size;

cout<<size<<endl;

// 方法二

FILE* file = fopen(filepath, "rb");

if (file)

{

int size = filelength(fileno(file));

cout<<size<<endl;

fclose(file);

}

// 方法三

CFile cfile;

if (cfile.Open(filepath, CFile::modeRead))

{

int size = cfile.GetLength();

cout<<size<<endl;

}

// 方法四

HANDLE handle = CreateFile(filepath, FILE_READ_EA, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);

if (handle != INVALID_HANDLE_VALUE)

{

int size = GetFileSize(handle, NULL);

cout<<size<<endl;

CloseHandle(handle);

}

}

VS2005:若编译链接不通过,需要修改工程设置:

(1) Configuration Properties -> C/C++ -> Code Generation -> Runtime Library, 选择"Multi-threaded Debug(/MTd)"

(2) Configuration Properties -> Linker -> Input -> Ignore Specific Library, 输入"msvcprtd.lib"

例子中,由于在工程打开状态下,test.ncb文件无法打开,所以方法二、三无法获取文件大小,因此推荐使用方法一、四。

如果还有其它方法,请大家补充。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: