×

系统编程获取文件大大小

系统编程获取文件大大小(编程实现获取文件大小的函数)

admin admin 发表于2023-04-01 12:06:12 浏览58 评论0

抢沙发发表评论

本文目录一览:

如何获取文件的大小?

一、通过 CFile 类的成员函数 GetLength 获取文件大小;二、通过 CFileFind 类的成员函数 GetLength 获取文件大小;下面详细说明这两种方法:一、CFile 类1、通过 Open 成员函数打开文件;2、通过 GetLength 成员函数获取文件大小;3、通过 Close 关闭文件。CFile f; CString str;f.Open("e:\test1.wav",CFile::modeRead|CFile::shareDenyNone); str.Format("File size : %d",f.GetLength()); f.Close();MessageBox(str);二、CFileFind 类1、通过 FindFile 开始查找文件;2、通过 FindNextFile 获取文件信息;3、通过 GetLength 获取文件大小;4、通过 Close 关闭查找。CFileFind finder; CString str;finder.FindFile("e:\test1.wav"); finder.FindNextFile(); str.Format("File size : %d",finder.GetLength()); finder.Close();MessageBox(str); 以上是 MFC 的方法,下面是 SDK 方法:一、通过 GetFileSize API 函数获取文件大小;HANDLE hFile; DWORD dwFileSize = 0; char szData[30];hFile = CreateFile("e:\test1.wav",GENERIC_READ,FILE_SHARE_READ,NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);dwFileSize = GetFileSize(hFile,NULL);CloseHandle(hFile);sprintf(szData,"File Size : %d",dwFileSize);MessageBox(NULL,szData,"FileSize",MB_ICONINFORMATION); 二、通过 FindFirstFile 和 WIN32_FIND_DATA 方法获取文件大小;LPWIN32_FIND_DATA lpFindFileData; HANDLE hFindFile; char szData[30];lpFindFileData = new WIN32_FIND_DATA;hFindFile = FindFirstFile("e:\test1.wav",lpFindFileData); FindNextFile(hFindFile,lpFindFileData); MessageBox(NULL,szData,"FileSize",MB_ICONINFORMATION);delete lpFindFileData;说明:以上代码都没有检查函数返回值,读者在实际编写程序时应该检查文件打开是否成功。另外,CFile 类在实现时,是从文件头移动到文件尾,而不是用 GetFileSize API 函数实现的,有兴趣的朋友可以看看MFC源代码。体验新版博客

如何用C语言获取文件的大小

两种方法:

1、用stat()函数来获取

int main(){ struct stat st ; stat( "file.txt", st ); printf(" file size = %d\n", st.st_size); return 0;}2、用ftell()函数来获取-系统编程获取文件大大小

int main(){ FILE *fp; fp=fopen( "file.txt", "r"); fseek(fp, 0L, SEEK_END ); printf(" file size = %d\n", ftell(fp) ); return 0;}-系统编程获取文件大大小

C# 如何获取文件大小?

没啥好的办法,只能用遍历解决,下面是完整的方法,但没考虑到隐藏文件和系统文件。

private long GetDictSize(string path)

{

if (!System.IO.Directory.Exists(path))

return 0;

string[] fs = System.IO.Directory.GetFiles(path, "*.*", System.IO.SearchOption.AllDirectories);

//获取该文件夹中所有的文件名

long ll = 0;

foreach (string f in fs) {

dynamic fa = System.IO.File.GetAttributes(f);

System.IO.FileInfo fi = new System.IO.FileInfo(f);

ll += fi.Length;

}

return ll;

}

获取文件大小的几种方法

关于这个问题, 我们有几种解决方案,其实前面我都写过这样的文章, 今天只是想总结一下:

方案1:GetFileSize, 这个函数最简单了, 看代码:

#includewindows.h#includestdio.hint main(int argc, LPTSTR argv[]){ DWORD lowSize, highSize; HANDLE hFile;-系统编程获取文件大大小

hFile = CreateFile(argv[1], GENERIC_READ, 0,NULL, OPEN_EXISTING, 0,NULL); if(hFile == INVALID_HANDLE_VALUE){ printf("open file error: %x", GetLastError()); return 1; } lowSize = GetFileSize(hFile,highSize); printf("the size of %s is %.2fMB", argv[1], lowSize / 1024.0 / 1024.0); return 0;}方案1很简单, 调用GetFileSize, 他有两个参数:一个是CreateFile返回的句柄, 一个是DWORD型的参数指针, 代表文件大小的高位值, 我们前面也说过了, 这个参数基本没有什么意义, 你认为你的单个文件会大于4G吗? 函数返回低位值, 表示字节单位的文件大小。-系统编程获取文件大大小

方案二, 用标准C库来写, fseek与ftell.

这个方案来得非常简单, 用C就可以完成:

#includestdio.h#includestdlib.hint main(int argc,char* argv[]){ FILE* fp; long size;

fp =fopen(argv[1],"rb"); if(fp ==NULL){ perror("open file error:"); return 1; } fseek(fp, 0,SEEK_END); size =ftell(fp); fclose(fp); printf("the size of %s is %.2fMB", argv[1], size / 1024.0 / 1024.0);-系统编程获取文件大大小

}这个方案采用fseek函数, 把文件指针指向末尾, 用ftell来指示末尾的位置,间接指示文件大小。

方案3. 用FindFirstFile与FindNextFile.

这个方法来得有点复杂, 不过在解决某些问题则是必要的……

我们首先了解WIN32_FIND_DATA结构:

typedefstruct _WIN32_FIND_DATA { DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; TCHAR cFileName[MAX_PATH]; TCHAR cAlternateFileName[14];} WIN32_FIND_DATA,*PWIN32_FIND_DATA,*LPWIN32_FIND_DATA;今天我们只用到nFileLowSize和cFileName两个成员变量。一个代表字节单位的文件大小, 一个代表文件的名字。-系统编程获取文件大大小

我们看一下FindFirstFile与FindNextFile的声明:

HANDLE WINAPI FindFirstFile( __in LPCTSTR lpFileName, __out LPWIN32_FIND_DATA lpFindFileData

);BOOL WINAPI FindNextFile( __in HANDLE hFindFile, __out LPWIN32_FIND_DATA lpFindFileData

);有了这些方面的知识, 请可以看代码了:

#includewindows.h#includestdio.hint main(int argc, TCHAR* argv[]){ HANDLE hFile; int i; WIN32_FIND_DATA findData; BOOL bFind =FALSE; if(argc != 2){ printf("usage: FileSize2 file"); return 1; } hFile = FindFirstFile(argv[1],findData); if(hFile != INVALID_HANDLE_VALUE) bFind =TRUE; while(bFind){ printf("the size of %40s is %10.2f-系统编程获取文件大大小

", findData.cFileName, findData.nFileSizeLow / 1024.0 / 1024.0); bFind = FindNextFile(hFile,findData); } FindClose(hFile);}看一下它运行了一些结果:-系统编程获取文件大大小