c++ - programacion - manejo de archivos en c pdf
¿Cómo puedo obtener el tamaño de un archivo en C++? (7)
El siguiente fragmento de código aborda exactamente la pregunta en esta publicación :)
///
/// Get me my file size in bytes (long long to support any file size supported by your OS.
///
long long Logger::getFileSize()
{
std::streampos fsize = 0;
std::ifstream myfile ("myfile.txt", ios::in); // File is of type const char*
fsize = myfile.tellg(); // The file pointer is currently at the beginning
myfile.seekg(0, ios::end); // Place the file pointer at the end of file
fsize = myfile.tellg() - fsize;
myfile.close();
static_assert(sizeof(fsize) >= sizeof(long long), "Oops.");
cout << "size is: " << fsize << " bytes./n";
return fsize;
}
Esta pregunta ya tiene una respuesta aquí:
Vamos a crear una pregunta complementaria a esta . ¿Cuál es la forma más común de obtener el tamaño del archivo en C ++? Antes de responder, asegúrese de que sea portátil (puede ejecutarse en Unix, Mac y Windows), confiable, fácil de entender y sin dependencias de biblioteca (no boost o qt, pero por ejemplo glib está bien ya que es una biblioteca portátil).
Aunque no es necesariamente el método más popular, he escuchado que el método ftell, fseek no siempre da resultados precisos en algunas circunstancias. Específicamente, si se utiliza un archivo ya abierto y el tamaño debe resolverse con respecto a eso y sucede que se abre como un archivo de texto, entonces dará respuestas incorrectas.
Los siguientes métodos siempre deberían funcionar, ya que stat forma parte de la biblioteca de tiempo de ejecución en Windows, Mac y Linux.
long GetFileSize(std::string filename)
{
struct stat stat_buf;
int rc = stat(filename.c_str(), &stat_buf);
return rc == 0 ? stat_buf.st_size : -1;
}
or
long FdGetFileSize(int fd)
{
struct stat stat_buf;
int rc = fstat(fd, &stat_buf);
return rc == 0 ? stat_buf.st_size : -1;
}
En algunos sistemas también hay un stat64 / fstat64. Por lo tanto, si necesita esto para archivos muy grandes, puede consultarlos.
En c ++ puede usar la siguiente función, devolverá el tamaño de su archivo en bytes.
#include <fstream>
int fileSize(const char *add){
ifstream mySource;
mySource.open(add, ios_base::binary);
mySource.seekg(0,ios_base::end);
int size = mySource.tellg();
mySource.close();
return size;
}
También es posible descubrirlo usando las funciones fopen (), fseek () y ftell ().
int get_file_size(std::string filename) // path to file
{
FILE *p_file = NULL;
p_file = fopen(filename.c_str(),"rb");
fseek(p_file,0,SEEK_END);
int size = ftell(p_file);
fclose(p_file);
return size;
}
Usando el sistema de archivos C ++ TS:
#include <experimental/filesystem>
namespace fs = std::experimental::filesystem;
int main(int argc, char *argv[]) {
fs::path p{argv[1]};
p = fs::canonical(p);
std::cout << "The size of " << p.u8string() << " is " <<
fs::file_size(p) << " bytes./n";
}
#include <fstream>
std::ifstream::pos_type filesize(const char* filename)
{
std::ifstream in(filename, std::ifstream::ate | std::ifstream::binary);
return in.tellg();
}
Consulte http://www.cplusplus.com/doc/tutorial/files/ para obtener más información sobre los archivos en C ++.
#include <stdio.h>
int main()
{
FILE *f;
f = fopen("mainfinal.c" , "r");
fseek(f, 0, SEEK_END);
unsigned long len = (unsigned long)ftell(f);
printf("%ld/n", len);
fclose(f);
}