Estoy seguro de que me he perdido esto en el manual, pero ¿cómo se determina el tamaño de un archivo (en bytes) usando la clase istream
de C++ desde el encabezado fstream
?Usando flujos de archivos C++ (fstream), ¿cómo se puede determinar el tamaño de un archivo?
Respuesta
Puede abrir el archivo con la bandera ios::ate
(y ios::binary
bandera), por lo que la tellg()
función le dará directamente el tamaño del archivo:
ifstream file("example.txt", ios::binary | ios::ate);
return file.tellg();
@Dominik Honnef: en VS 2013 Update5 64 bit este enfoque, con _ios: ate_ y sin _seekg (0, ios: end) _ podría no funcionar para archivos de gran tamaño. Consulte http://stackoverflow.com/questions/32057750/how-to-get-the-filesize-for-large-files-in-c para obtener más información. –
Esto no parece un buen enfoque. [tellg no informa el tamaño del archivo, ni el desplazamiento desde el principio en bytes] (http://stackoverflow.com/a/22986486/1835769). – displayName
@displayName [cplusplus.com] (http://www.cplusplus.com/reference/istream/istream/seekg/) no está de acuerdo con esa afirmación: de hecho usa 'tellg()' para detectar tamaño de archivo. –
Usted puede buscar hasta el final, y luego calcular la diferencia:
std::streampos fileSize(const char* filePath){
std::streampos fsize = 0;
std::ifstream file(filePath, std::ios::binary);
fsize = file.tellg();
file.seekg(0, std::ios::end);
fsize = file.tellg() - fsize;
file.close();
return fsize;
}
De esta manera:
long begin, end;
ifstream myfile ("example.txt");
begin = myfile.tellg();
myfile.seekg (0, ios::end);
end = myfile.tellg();
myfile.close();
cout << "size: " << (end-begin) << " bytes." << endl;
Es posible que desee utilizar el 'std :: streampos' más apropiado en lugar de' long', ya que este último puede no ser tan amplio como el anterior, y 'streampos' * es * más que un número entero. –
soy un novato, pero esta es mi autodidacta forma de hacerlo:
ifstream input_file("example.txt", ios::in | ios::binary)
streambuf* buf_ptr = input_file.rdbuf(); //pointer to the stream buffer
input.get(); //extract one char from the stream, to activate the buffer
input.unget(); //put the character back to undo the get()
size_t file_size = buf_ptr->in_avail();
//a value of 0 will be returned if the stream was not activated, per line 3.
, todo lo que hace es determinar si hay un primer carácter. ¿Cómo ayuda eso? – warren
No utilice tellg
para determinar el tamaño exacto del archivo. La longitud determinada por tellg
será mayor que la cantidad de caracteres que se pueden leer del archivo.
De stackoverflow pregunta tellg() function give wrong size of file?tellg
no informa el tamaño del archivo, ni el desplazamiento desde el principio en bytes. Informa un valor de token que luego puede usarse para buscar en el mismo lugar, y nada más. (Ni siquiera está garantizado que pueda convertir el tipo a un tipo integral). Para Windows (y la mayoría de los sistemas que no son Unix), en modo texto, no hay una asignación directa e inmediata entre lo que devuelve el informe y la cantidad de bytes que debe leer para llegar a esa posición.
Si es importante saber exactamente cuántos bytes puede leer, la única manera de hacerlo es leyendo. Usted debe ser capaz de hacer esto con algo como:
#include <fstream>
#include <limits>
ifstream file;
file.open(name,std::ios::in|std::ios::binary);
file.ignore(std::numeric_limits<std::streamsize>::max());
std::streamsize length = file.gcount();
file.clear(); // Since ignore will have set eof.
file.seekg(0, std::ios_base::beg);
- 1. ¿Se puede determinar el tamaño del archivo que se descargará?
- 2. Fstream no puede crear un nuevo archivo
- 3. descriptor de archivo de un std :: fstream
- 4. ¿Cómo determinar el tamaño de un búfer C asignado?
- 5. Cómo devolver un fstream (C++ 0x)
- 6. ¿se puede determinar el tamaño de la matriz en tiempo de ejecución en c?
- 7. C++: obteniendo un tamaño de archivo incorrecto
- 8. No se puede determinar el tamaño del terminal con ncurses
- 9. ARCHIVO vs fstream
- 10. ¿Cómo verificar el tamaño de un archivo?
- 11. Django "No se puede determinar el tamaño del archivo" error con tempfile.TemporaryFile
- 12. ¿Cómo cambiar el tamaño del archivo gif animado usando C#?
- 13. Crear objeto fstream desde un archivo * puntero
- 14. ¿Cómo determinar el tamaño de un icono de un HICON?
- 15. C++ ¿Puedo reutilizar fstream para abrir y escribir varios archivos?
- 16. Abrir fstream con archivo con nombre de archivo Unicode en Windows usando el compilador no MSVC
- 17. ¿Cómo puedo determinar el tamaño exacto del archivo de imagen PE usando su encabezado (s)?
- 18. Cómo mezclar múltiples flujos PCM usando ALSA
- 19. Determinar el tamaño del código C#
- 20. C++ fstream - Creando banderas de formato propias
- 21. ¿Cómo se puede determinar si existe un archivo dentro del paquete de la aplicación?
- 22. std :: fstream no crea el archivo
- 23. Determinar el tamaño de un archivo de más de 4 GB
- 24. ¿Cómo puedo determinar si un archivo es un archivo PDF?
- 25. ¿Cómo se obtiene el tamaño de un archivo en MATLAB?
- 26. ¿Cómo puedo determinar el tamaño de un tipo en Haskell?
- 27. Cómo adjuntar a un archivo con Fstream Fstream :: aplicación bandera parece no funcionar
- 28. No se puede determinar el directorio actual
- 29. Python: no se puede abrir un archivo usando os.system()
- 30. ¿Qué permisos tiene un archivo escrito con fstream?
http://stackoverflow.com/questions/2282549/c-getting-incorrect-file-size/2289423#2289423 –