Newsgroups: alt.sources
From: "Alex Vinokur" <ale...@big-foot.com>
Date: Tue, 15 Feb 2005 09:07:39 +0200
Local: Tues, Feb 15 2005 2:07 am
Subject: [C++] Getting file size
// ==========================================
// Getting file size // Usage Sample Code // Version GFS-1.1 // --------------------------- // Alex Vinokur // email: alex DOT vinokur AT gmail DOT com // http://up.to/alexvn // ========================================== // ================== // ------------------ #define TXT_FILE_NAME "foo.txt" // ----------------- fp = fopen(filename_i, txt_mode_i ? "r" : "rb"); int rc = fseek(fp, 0, SEEK_END); const size_t ret_filesize (ftell(fp)); rc = fclose(fp); return ret_filesize; } #ifdef UNIX_ENV // ----------------- fd = open(filename_i, txt_mode_i ? O_RDONLY : O_RDONLY | O_BINARY); off_t rc; const size_t ret_filesize (static_cast<size_t>(rc)); rc = close(fd); return ret_filesize; } // ----------------- size_t get_filesize_via_fstat ( const char * const filename_i, bool txt_mode_i = true ) { int fd = 0; fd = open(filename_i, txt_mode_i ? O_RDONLY : O_RDONLY | O_BINARY); struct stat buf; const size_t ret_filesize (static_cast<size_t>(buf.st_size)); rc = close(fd); return ret_filesize; } // ----------------- size_t get_filesize_via_stat ( const char * const filename_i ) { struct stat buf; int rc = stat (filename_i, &buf); const size_t ret_filesize (static_cast<size_t>(buf.st_size)); return ret_filesize; } #endif // ----------------- if (txt_mode_i) fs.open (filename_i); assert (fs); fs.seekg(0, ios::beg); fs.seekg(0, ios::end); const size_t ret_filesize (static_cast<size_t>(end_pos - start_pos)); fs.close(); return ret_filesize; } // ----------------- size_t get_filesize_via_distance ( const char * const filename_i, bool txt_mode_i = true ) { ifstream fs; if (txt_mode_i) fs.open (filename_i); assert (fs); const size_t ret_filesize (static_cast<size_t>(distance( fs.close(); return ret_filesize; } // ----------------- size_t get_filesize_via_rdbuf_pubseekoff ( const char * const filename_i, bool txt_mode_i = true ) { ifstream fs; if (txt_mode_i) fs.open (filename_i); assert (fs); const size_t ret_filesize (static_cast<size_t>(fs.rdbuf()->pubseekoff (0,ios::end,ios::in))); fs.close(); return ret_filesize; } // ----------------- void create_file ( const string& data_i, const char * const filename_i, bool txt_mode_i = true ) { remove (filename_i); ofstream fs; if (txt_mode_i) fs.open (filename_i); assert (fs); fs << data_i; fs.close(); } int main () { const char data[] = "\n"; create_file (data, TXT_FILE_NAME); create_file (data, BIN_FILE_NAME, false); // ------------------------------------------- cout << "--- get_filesize_via_fseek_ftell" << endl; cout << "Created in TXT mode, read in TXT mode: " cout << "Created in BIN mode, read in BIN mode: " cout << "Created in TXT mode, read in BIN mode: " cout << "Created in BIN mode, read in TXT mode: " #ifdef UNIX_ENV cout << "--- get_filesize_via_lseek" << endl; cout << "Created in TXT mode, read in TXT mode: " cout << "Created in BIN mode, read in BIN mode: " cout << "Created in TXT mode, read in BIN mode: " cout << "Created in BIN mode, read in TXT mode: " // ------------------------------------------- cout << "--- get_filesize_via_fstat" << endl; cout << "Created in TXT mode, read in TXT mode: " cout << "Created in BIN mode, read in BIN mode: " cout << "Created in TXT mode, read in BIN mode: " cout << "Created in BIN mode, read in TXT mode: " // ------------------------------------------- cout << "--- get_filesize_via_stat" << endl; cout << "Created in TXT mode : " cout << "Created in BIN mode : " #endif // ------------------------------------------- cout << "--- get_filesize_via_seekg_tellg" << endl; cout << "Created in TXT mode, read in TXT mode: " cout << "Created in BIN mode, read in BIN mode: " cout << "Created in TXT mode, read in BIN mode: " cout << "Created in BIN mode, read in TXT mode: " // ------------------------------------------- cout << "--- get_filesize_via_distance" << endl; cout << "Created in TXT mode, read in TXT mode: " cout << "Created in BIN mode, read in BIN mode: " cout << "Created in TXT mode, read in BIN mode: " cout << "Created in BIN mode, read in TXT mode: " // ------------------------------------------- cout << "--- get_filesize_via_rdbuf_pubseekoff" << endl; cout << "Created in TXT mode, read in TXT mode: " cout << "Created in BIN mode, read in BIN mode: " cout << "Created in TXT mode, read in BIN mode: " cout << "Created in BIN mode, read in TXT mode: " } -- Alex Vinokur email: alex DOT vinokur AT gmail DOT com http://mathforum.org/library/view/10978.html http://sourceforge.net/users/alexvn You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
| ||||||||||||||