Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > Reading large files

Reply
Thread Tools

Reading large files

 
 
JS
Guest
Posts: n/a
 
      09-19-2003
Hello all!

I have come on to a problem for which I am not able to find a solution
searching the web.

What I am trying to do is reading a log-file with a size of 1.3 GB.
When reading it using fread() or the Visual C specific(?) read() they
return that the number of bytes read equals the number of bytes
requested, however all of the bytes read turn out to have a value of
zero (the file contains other values). When using the exact same code
on a much smaller file (1 MB) it works fine.

char filename[] = "c:/temp/data2000.dat";
char buffer[40];
FILE *file_d;
struct _stat stat_buf;
int fd;
int file_exists;
long file_size;

//Returns true:
file_exists = (_stat(filename,&stat_buf)==0) && (stat_buf.st_mode &
S_IFREG);
//Returns 1328000000 (actual filesize):
file_size = (file_exists) ? stat_buf.st_size : -1;


//Booth returns values <> NULL and -1:
//file_d = fopen(filename, "r");
fd = open(filename, _O_RDONLY);

//Both returns 40:
//bytes_read = fread(buffer, 1, sizeof(buffer), file_d);
bytes_read = read(fd, buffer, 40);

//fclose(file_d);
close(fd);

Greatful for any ideas!
Best regards
 
Reply With Quote
 
 
 
 
Irrwahn Grausewitz
Guest
Posts: n/a
 
      09-19-2003
(JS) wrote:

>Hello all!
>
>I have come on to a problem for which I am not able to find a solution
>searching the web.
>
>What I am trying to do is reading a log-file with a size of 1.3 GB.
>When reading it using fread() or the Visual C specific(?) read() they
>return that the number of bytes read equals the number of bytes
>requested, however all of the bytes read turn out to have a value of
>zero (the file contains other values). When using the exact same code
>on a much smaller file (1 MB) it works fine.


<CODE SNIPPED>

Did you make sure your file contains pure text data? If it does not,
you should open it in binary mode.

Note that _stat(), open(), read(), and close() are not standard C
functions (Ah, I see from your remark above you already know ...).

Also note that both of us swapped the second and third argument of
fread, though this is useful to get the number of characters read in the
final call to fread, which will result most certainly in a partial
filled buffer. (It doesn't really matter anyway in this case, because
there's not a big difference between fread performing 40*1 or 1*40 calls
to fgetc respectively.)

The program below works fine for me (tested with a 2.8 GB file):

#include <stdio.h>
#include <stdlib.h>

#define BUFELEM 40
#define FILENAME "test.dat"

int main( void )
{
size_t num;
unsigned long count;
unsigned char buf[ BUFELEM ];
FILE *fp;

if ( ( fp = fopen( FILENAME, "rb" ) ) != NULL )
{
count = 0;
do
{
num = fread( buf, 1, BUFELEM, fp );
++count;
/* do sth. with buffer contents here [1] */
}
while ( num == BUFELEM );

/* Error checking snipped for brevity */

fclose( fp );
printf( "calls to fread: %ld\n", count );
}
else
{
fprintf( stderr, "Error opening file %s\n", FILENAME );
return EXIT_FAILURE;
}

return EXIT_SUCCESS;
}

[1] You may write the buffer contents to another file and compare
it to the original to make sure valid data had ben read.


Regards

Irrwahn
--
The generation of random numbers is too important
to be left to chance.
 
Reply With Quote
 
 
 
 
Severian
Guest
Posts: n/a
 
      09-19-2003
On 19 Sep 2003 00:13:37 -0700, (JS) wrote:

>Hello all!
>
>I have come on to a problem for which I am not able to find a solution
>searching the web.
>
>What I am trying to do is reading a log-file with a size of 1.3 GB.
>When reading it using fread() or the Visual C specific(?) read() they
>return that the number of bytes read equals the number of bytes
>requested, however all of the bytes read turn out to have a value of
>zero (the file contains other values). When using the exact same code
>on a much smaller file (1 MB) it works fine.


<code snipped>

Have you verified that the beginning of the file is not a bunch of
null characters, by using a binary dump facility or something?

- Sev


--
I am just a thought of mine, an egotisticality. (P. Crews)
 
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
Python 2.5, problems reading large ( > 4Gbyes) files on win2k paduffy@cisco.com Python 4 03-04-2007 07:03 PM
Reading large text files =?Utf-8?B?SHV0dHk=?= ASP .Net 1 09-27-2005 06:33 PM
Reading Large Files freesoft_2000 Java 18 08-13-2005 10:19 AM
reading large jpeg / jpg files error on java imageio read: javax.imageio.IIOException: Unsupported Image Type Davidski Java 0 11-05-2004 09:44 PM
Backing Up Large Files..Or A Large Amount Of Files Scott D. Weber For Unuathorized Thoughts Inc. Computer Support 1 09-19-2003 07:28 PM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57