C++中如何獲取文件大小的總結

轉載自 http://www.soft568.com/info/detail/4-5662.html


(一)

對文件操作時有時獲得文件的大小時必要的.下面是獲得其大小小的較簡單方法.
#include<io.h> //C語言頭文件
#include<iostream> //for system();
using namespace std;
int main()
{
int handle;
handle = open("test.txt", 0x0100); //open file for read
long length = filelength(handle); //get length of file
cout<<"file length in bytes:"<<length<<endl;
close(handle);

system("pause");
return 0;
}

(二)
//用Windows API 中的 GetFileSize()獲得文件長度
//假設文件file.txt 在當前目錄下
//file.txt的內容爲:123abc
//關於windows API函數情參考
部分windows API函數或MSDN
#include <iostream>
#include <windows.h> //for windows api
using namespace std;
int main()
{
//用API函數CreateFile()創建文件句柄
HANDLE fhadle = CreateFile("file.txt", //文件名或路徑
0,
0,
0,
OPEN_EXISTING, //文件存在則打開並讀

0,
0);
DWORD size = GetFileSize(fhadle,0);
cout<<"size:"<<size<<endl;
return 0;
}
//輸出:
size:6

(三)
//假設文件file.txt存在,且在當前目錄下
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char* argv[])
{
ifstream in("file.txt");
in.seekg(0, ios::end); //設置文件指針到文件流的尾部
streampos ps = in.tellg(); //讀取文件指針的位置
cout << "File size: " << ps << endl;
in.close(); //關閉文件流
return 0;
}
以上部分轉自http://blog.sina.com.cn/u/1066677252
(四)
在VC中,CFILE的GetLength()函數可直接得到大小:
CFile cf;
// Attempt to open thefile for reading.
if( !cf.Open( pszFilename, CFile::modeRead ) )
return( FALSE );
// Get the size of the file and store
// in a local variable. .
DWORD dwSize;
dwDibSize = cf.GetLength();
(五)
#include <sys/types.h>;
#include <sys/stat.h>;

long
get_filesize(char *filename)
{
struct stat f_stat;
if (stat(filename, &f_stat) == -1) {
return -1;
}
return (long)f_stat.st_size;
}
(六)
int main(void)
{
struct stat statbuf;
FILE *stream;

/* open a file for update */
if ((stream = fopen(FILENAME, "w+")) == NULL)
{
fprintf(stderr, "Cannot open output file.\n");
return(1);
}

/* get information about the file */
stat(FILENAME, &statbuf);

fclose(stream);

/* display the information returned */
if (statbuf.st_mode & S_IFCHR)

printf("Handle refers to a device.\n");
if (statbuf.st_mode & S_IFREG)
printf("Handle refers to an ordinary file.\n");
if (statbuf.st_mode & S_IREAD)
printf("User has read permission on file.\n");
if (statbuf.st_mode & S_IWRITE)
printf("User has write permission on file.\n");

printf("Drive letter of file: %c\n", 'A'+statbuf.st_dev);
printf("Size of file in bytes: %ld\n", statbuf.st_size);
printf("Time file last opened: %s\n", ctime(&statbuf.st_ctime));

return 0;
}
(七)
#include <sys\stat.h>;
#include <string.h>;
#include <stdio.h>;
#include <fcntl.h>;
#include <io.h>;

int main(void)
{
int handle;
char msg[] = "This is a test";
char ch;

/* create a file */
handle = open("TEST.$$$", O_CREAT | O_RDWR, S_IREAD | S_IWRITE);

/* write some data to the file */
write(handle, msg, strlen(msg));

/* seek to the beginning of the file */
lseek(handle, 0L, SEEK_SET);

/* reads chars from the file until we hit EOF */

do
{
read(handle, &ch, 1);
printf("%c", ch);
} while (!eof(handle));

close(handle);
return 0;
}
八 這種方法剛在Dev-cpp上實驗過
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char * argv[])
{
if (argc>1)
{
cout<<argv[1]<<endl;
ifstream in(argv[1]);
if (!in) return (-1);

in.seekg(0, ios_base::end);
streampos pos=in.tellg();

cout<<"file size "<<pos<<endl;
}
else return -1;
return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章