Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > Help ! how to get a file size larger than 2G?

Reply
Thread Tools

Help ! how to get a file size larger than 2G?

 
 
zou
Guest
Posts: n/a
 
      09-30-2007
there is a file which is very large,

we can use stat to get a file size(<2G),
struct stat buf;
stat("file", &buf);
long s=(long)stat.st_size;

but stat::st_size is type of off_t(typedef long),
so how about a file larger than 2G?

many thanks~
 
Reply With Quote
 
 
 
 
santosh
Guest
Posts: n/a
 
      09-30-2007
zou wrote:

> there is a file which is very large,
>
> we can use stat to get a file size(<2G),
> struct stat buf;
> stat("file", &buf);
> long s=(long)stat.st_size;
>
> but stat::st_size is type of off_t(typedef long),
> so how about a file larger than 2G?


You'll have to investigate the options provided by your platform. Standard C
itself specifies no functions to get the size of a "file." The only fully
portable method is to read through the file and keep count, and even then,
it's size "on disk" might be different to the size calculated by reading
it.

You also seem to be using C++. If so, then the appropriate group is
comp.lang.c++.

 
Reply With Quote
 
 
 
 
Ian Collins
Guest
Posts: n/a
 
      09-30-2007
zou wrote:
> there is a file which is very large,
>
> we can use stat to get a file size(<2G),
> struct stat buf;
> stat("file", &buf);
> long s=(long)stat.st_size;
>
> but stat::st_size is type of off_t(typedef long),
> so how about a file larger than 2G?
>

You are as off topic here as you were in c.l.c++, try comp.unix.programmer.

--
Ian Collins.
 
Reply With Quote
 
CBFalconer
Guest
Posts: n/a
 
      09-30-2007
zou wrote:
>
> there is a file which is very large,
>
> we can use stat to get a file size(<2G),
> struct stat buf;
> stat("file", &buf);
> long s=(long)stat.st_size;
>
> but stat::st_size is type of off_t(typedef long),
> so how about a file larger than 2G?


stat and off_t are not part of standard C and thus off-topic here.
Find a newsgroup dealing with your system, possibly
comp.unix.programmer.

--
Chuck F (cbfalconer at maineline dot net)
Available for consulting/temporary embedded and systems.
<http://cbfalconer.home.att.net>



--
Posted via a free Usenet account from http://www.teranews.com

 
Reply With Quote
 
karthikbalaguru
Guest
Posts: n/a
 
      09-30-2007
On Sep 30, 1:06 pm, CBFalconer <(E-Mail Removed)> wrote:
> zou wrote:
>
> > there is a file which is very large,

>
> > we can use stat to get a file size(<2G),
> > struct stat buf;
> > stat("file", &buf);
> > long s=(long)stat.st_size;

>
> > but stat::st_size is type of off_t(typedef long),
> > so how about a file larger than 2G?

>
> stat and off_t are not part of standard C and thus off-topic here.
> Find a newsgroup dealing with your system, possibly
> comp.unix.programmer.
>


It looks like this function is only available to Unix systems.
I think, you can check with the man page of stat.

C version of code
Refer this link - http://www.phim.unibe.ch/comp_doc/c_...XAMPLES/stat.c

#include <sys/stat.h> /* declare the 'stat' structure */

struct stat stat_p; /* 'stat_p' is a pointer to a structure
* of type 'stat'. */

if ( -1 == stat (filename, &stat_p))
{
printf(" Error occoured attempting to stat %s\n", filename);
exit(0);
}

printf("File size is %d bytes\n", stat_p.st_size);

Karthik Balaguru

 
Reply With Quote
 
Charlie Gordon
Guest
Posts: n/a
 
      09-30-2007
"karthikbalaguru" <(E-Mail Removed)> a écrit dans le message de
news: (E-Mail Removed) om...
> On Sep 30, 1:06 pm, CBFalconer <(E-Mail Removed)> wrote:
>> zou wrote:
>>
>> > there is a file which is very large,

>>
>> > we can use stat to get a file size(<2G),
>> > struct stat buf;
>> > stat("file", &buf);
>> > long s=(long)stat.st_size;

>>
>> > but stat::st_size is type of off_t(typedef long),
>> > so how about a file larger than 2G?

>>
>> stat and off_t are not part of standard C and thus off-topic here.
>> Find a newsgroup dealing with your system, possibly
>> comp.unix.programmer.
>>

>
> It looks like this function is only available to Unix systems.
> I think, you can check with the man page of stat.


Wrong, it is available on a lot of non-Unix systems: cygwin, Windows (albeit
renamed to _stat)

> C version of code
> Refer this link -
> http://www.phim.unibe.ch/comp_doc/c_...XAMPLES/stat.c


That code looks pretty old and bogus

>
> #include <sys/stat.h> /* declare the 'stat' structure */


These are possibly also needed:
#include <sys/types.h>
#include <unistd.h>

>
> struct stat stat_p; /* 'stat_p' is a pointer to a structure
> * of type 'stat'. */


wrong, stat_p is a struct with an utterly misleading name


> if ( -1 == stat (filename, &stat_p))


This style looks childish to me.

> {
> printf(" Error occoured attempting to stat %s\n", filename);


More typos, plus errors should go to stderr.

> exit(0);


Better exit with EXIT_FAILURE if this is an error

> }
>
> printf("File size is %d bytes\n", stat_p.st_size);


stat_p.st_size is not an int.
It is an off_t: possibly a long or a long long.
It would be safer to write:

printf("File size is %lld bytes\n", (long long)stat_p.st_size);

Your post was off topic, and a correct answer had already been given with an
appropriate newsgroup to query.
To make things worse, your anwser is misleading and erroneous.
Please refrain from posting answers on topics you do not master, especially
when the question is off topic already.

--
Chqrlie.


 
Reply With Quote
 
tianyf@gmail.com
Guest
Posts: n/a
 
      09-30-2007
On Sep 30, 9:21 am, zou <(E-Mail Removed)> wrote:
> there is a file which is very large,
>
> we can use stat to get a file size(<2G),
> struct stat buf;
> stat("file", &buf);
> long s=(long)stat.st_size;
>
> but stat::st_size is type of off_t(typedef long),
> so how about a file larger than 2G?
>
> many thanks~


What kind of compilers are you using?

I once did so in Microsoft Visual C++ 6.0. According to GNU C library,
there should be some functions like stat64/fstat64, but I cannot get
it work in Cygwin. I guess that stat64 would work in Linux/Unix.

Regards,
Tian

 
Reply With Quote
 
santosh
Guest
Posts: n/a
 
      09-30-2007
karthikbalaguru wrote:

> On Sep 30, 1:06 pm, CBFalconer <(E-Mail Removed)> wrote:
>> zou wrote:
>>
>> > there is a file which is very large,

>>
>> > we can use stat to get a file size(<2G),
>> > struct stat buf;
>> > stat("file", &buf);
>> > long s=(long)stat.st_size;

>>
>> > but stat::st_size is type of off_t(typedef long),
>> > so how about a file larger than 2G?

>>
>> stat and off_t are not part of standard C and thus off-topic here.
>> Find a newsgroup dealing with your system, possibly
>> comp.unix.programmer.
>>

>
> It looks like this function is only available to Unix systems.
> I think, you can check with the man page of stat.
>
> C version of code
> Refer this link -
> http://www.phim.unibe.ch/comp_doc/c_...XAMPLES/stat.c
>
> #include <sys/stat.h> /* declare the 'stat' structure */
>
> struct stat stat_p; /* 'stat_p' is a pointer to a structure
> * of type 'stat'. */
>
> if ( -1 == stat (filename, &stat_p))
> {
> printf(" Error occoured attempting to stat %s\n", filename);
> exit(0);
> }
>
> printf("File size is %d bytes\n", stat_p.st_size);


Please attempt, wherever possible, to provide correct and compilable code.
The above code fragment, besides being uncompilable, is also not correct,
in that it invokes undefined behaviour in at least one place.

 
Reply With Quote
 
Richard Tobin
Guest
Posts: n/a
 
      09-30-2007
In article <fdmtlu$kd$(E-Mail Removed)>, zou <(E-Mail Removed)> wrote:

> but stat::st_size is type of off_t(typedef long),
> so how about a file larger than 2G?


I suppose by "stat::st_size" you mean the st_size field of the stat
structure. Note that stat() isn't a standard C function, but a unix
one which has made its way into some other systems.

Some systems have a symbol you can #define to make off_t be a 64-bit
type on a system where it is usually 32 bits. It appears to be
__USE_FILE_OFFSET64 on a Linux system here, but I have no experience
of using it so I recommend you ask in a group more specific to your
system.

-- Richard
--
"Consideration shall be given to the need for as many as 32 characters
in some alphabets" - X3.4, 1963.
 
Reply With Quote
 
Richard Harter
Guest
Posts: n/a
 
      09-30-2007
On Sun, 30 Sep 2007 17:51:08 +0530, santosh
<(E-Mail Removed)> wrote:

>karthikbalaguru wrote:
>
>> On Sep 30, 1:06 pm, CBFalconer <(E-Mail Removed)> wrote:
>>> zou wrote:
>>>
>>> > there is a file which is very large,
>>>
>>> > we can use stat to get a file size(<2G),
>>> > struct stat buf;
>>> > stat("file", &buf);
>>> > long s=(long)stat.st_size;
>>>
>>> > but stat::st_size is type of off_t(typedef long),
>>> > so how about a file larger than 2G?
>>>
>>> stat and off_t are not part of standard C and thus off-topic here.
>>> Find a newsgroup dealing with your system, possibly
>>> comp.unix.programmer.
>>>

>>
>> It looks like this function is only available to Unix systems.
>> I think, you can check with the man page of stat.
>>
>> C version of code
>> Refer this link -
>> http://www.phim.unibe.ch/comp_doc/c_...XAMPLES/stat.c
>>
>> #include <sys/stat.h> /* declare the 'stat' structure */
>>
>> struct stat stat_p; /* 'stat_p' is a pointer to a structure
>> * of type 'stat'. */
>>
>> if ( -1 == stat (filename, &stat_p))
>> {
>> printf(" Error occoured attempting to stat %s\n", filename);
>> exit(0);
>> }
>>
>> printf("File size is %d bytes\n", stat_p.st_size);

>
>Please attempt, wherever possible, to provide correct and compilable code.
>The above code fragment, besides being uncompilable, is also not correct,
>in that it invokes undefined behaviour in at least one place.
>


You've misread the posting.


Richard Harter, (E-Mail Removed)
http://home.tiac.net/~cri, http://www.varinoma.com
But the rhetoric of holistic harmony can generate into a kind of
dotty, Prince Charles-style mysticism. -- Richard Dawkins
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: How include a large array? Edward A. Falk C Programming 1 04-04-2013 08:07 PM
Help how to get file size of larger file(>2G)? zou C++ 3 09-29-2007 11:15 PM
Question: Can I make textarea larger (larger text)? Peter Williams HTML 1 06-03-2005 08:17 AM
20" LCD: setting 4 g Larger text in all Programs? and larger icons lbbss Computer Support 6 04-14-2005 05:46 PM
Cropped picture file size larger than original? Videot Digital Photography 12 10-21-2004 06:26 PM



Advertisments