c语言求文件长度,ftell得到文件长度为-1

c语言求文件长度,ftell得到文件长度为-1,第1张

C语言获取文件长度及全部内容,参考代码如下:

         

       FILEfp;

       fp=fopen("localfile","rb");// localfile文件名       

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

flen=ftell(fp); / 得到文件大小 /

p=(char )malloc(flen+1); / 根据文件大小动态分配内存空间 /

if(p==NULL)

{

fclose(fp);

return 0;

}

fseek(fp,0L,SEEK_SET); / 定位到文件开头 /

fread(p,flen,1,fp); / 一次性读取全部文件内容 /

p[flen]=0; / 字符串结束标志 / 

all:strchangeo

    gcc -o strchangeo -c strchangec

strchangeo:strchangec

    gcc -o strchange strchangeo

clean:

    rm -rf strchange o

用以下的方法可以获取一个文件的字节数:

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

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

源代码:

#include "stdafxh"

#include <stdioh>

#include <iostream>

using namespace std;

int main()

{

FILE fp = NULL;

int nFileLen = 0;

fp = fopen("c:/Testtxt", "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;

}

可以用 stat (win 下 _stat)函数直接得文件尺寸。

man 2 stat

1MFC中的方法:(C++)

CFileStatus status;

CFile::GetStatus("D:\\testtxt",status);

long lSizeOfFile;

lSizeOfFile = statusm_size;

lSizeOfFile的值就是D:\\testtxt文件的大小

2标准C获得文件大小的5种方法

(注意:"__FILE__"指的是当前文件,你可以改为有效路径的目标文件,比如"D:\\testtxt")

struct stat {

dev_t st_dev; / ID of device containing file /

ino_t st_ino; / inode number /

mode_t st_mode; / protection /

nlink_t st_nlink; / number of hard links /

uid_t st_uid; / user ID of owner /

gid_t st_gid; / group ID of owner /

dev_t st_rdev; / device ID (if special file) /

off_t st_size; / total size, in bytes /

blksize_t st_blksize; / blocksize for filesystem I/O /

blkcnt_t st_blocks; / number of blocks allocated /

time_t st_atime; / time of last access /

time_t st_mtime; / time of last modification /

time_t st_ctime; / time of last status change /

}

#include "stdafxh"

#include "stdioh"

#include <sys/stath>

#include <ioh>

#include <FCNTLH>

int getfilesize()

{

int iresult;

struct _stat buf;

iresult = _stat(__FILE__,&buf);

if(iresult == 0)

{

return bufst_size;

}

return NULL;

}

int getfilesize01()

{

int fp;

fp=_open(__FILE__,_O_RDONLY);

if(fp==-1)

return NULL;

return _filelength(fp);

//return NULL;

}

int getfilesize02()

{

int fp;

fp=_open(__FILE__,_O_RDONLY);

if(fp==-1)

return NULL;

return _lseek(fp,0,SEEK_END);

//return NULL;

}

int getfilesize03()

{

int fp;

fp=_open(__FILE__,_O_RDONLY);

if(fp==-1)

return NULL;

return _lseek(fp,0,SEEK_END);

//return NULL;

}

int getfilesize04()

{

FILE fp;

if((fp=fopen(__FILE__,"r"))==NULL)

return 0;

fseek(fp,0,SEEK_END);

return ftell(fp); //return NULL;

}

int getfilesize05()

{

FILE fp;

char str[1];

if((fp=fopen(__FILE__,"rb"))==NULL)

return 0;

for(int i = 0;!feof(fp);i++)

{

fread(&str,1,1,fp);

}

return i - 1; //return NULL;

}

int main(int argc, char argv[])

{

printf("getfilesize()=%d\n",getfilesize());

printf("getfilesize01()=%d\n",getfilesize01());

printf("getfilesize02()=%d\n",getfilesize02());

printf("getfilesize03()=%d\n",getfilesize03());

printf("getfilesize04()=%d\n",getfilesize04());

printf("getfilesize05()=%d\n",getfilesize05());

return 0;

}

stat函数不需要,只要文件名就行(你的文件在当前路径下,要不还需将路径名加上),int state(const char path,struct stat buf);这是函数原型。在struct state这个结构体中有个st_size这个变量,他就是文件大小的变量。具体你可以查一下man手册。与它类似的还有一个fstat,他需要open文件得到文件描述符。

1。GetLength()

不行,貌似它获取的是缓冲区内的数据大小,最大8192字节。

2。Seek()

不行,经他人验证不行,我也就懒得试了。

3。QueryOption()

获取的居然是乱码。

ULONG file_total_size=0;

TCHAR szContentLength[64]={0};

ULONG dwInfoSize = 64;

file->QueryOption(>

改用支持 64位整形的

_finddata64_t

_filelengthi64

_findfirsti64

_findnexti64

_telli64

以上几个方法执行的效果都如下:

读取的text文件如下:

空洞文件即是里面内容都是空字符的文件,主要用来占位置,实现如下:

生成的文件如下:

用vim打开是这样的

头文件:windowsh

   

long long fileSize; 

WIN32_FILE_ATTRIBUTE_DATA fi;

GetFileAttributesEx(TEXT("C:\\1dat"), GetFileExInfoStandard, &fi);

fileSize = finFileSizeHigh;

fileSize = (fileSize << 32) | finFileSizeLow;

然后fileSize就是你要的文件大小了

以上就是关于c语言求文件长度,ftell得到文件长度为-1全部的内容,包括:c语言求文件长度,ftell得到文件长度为-1、c代码中如何获取一个文件的字节数~~、C语言 stat()函数获得文件大小需不需要打开文件就是stat()函数是怎么获得文件的大小的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9513404.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存