¿Cómo leer solo "N" bytes de un archivo especificado?Solo lectura de "N" bytes desde un archivo en Cocoa
Respuesta
Abrir el archivo:
NSData *fileData = [NSData dataWithContentsOfFile:fileName];
Leer los bytes que desee:
int bytes[1000];
[fileData getBytes:bytes length:sizeof(int) * 1000];
Si se quiere evitar leer el archivo completo, sólo puede utilizar las funciones de E/S estándar CI:
#include <stdio.h>
...
FILE *file = fopen("the-file.dat", "rb");
if(file == NULL)
; // handle error
char theBuffer[1000]; // make sure this is big enough!!
size_t bytesRead = fread(theBuffer, 1, 1000, file);
if(bytesRead < 1000)
; // handle error
fclose(file);
Me pregunto si esto resolverá correctamente los alias del Finder en la ruta dada. – neoneye
Debería; Creo que los alias de Finder son solo enlaces simbólicos, y stdio puede manejar los enlaces simbólicos correctamente. Para descubrir el objetivo de un enlace simbólico en lugar de leer el archivo objetivo, se puede usar la función readlink (2), ver http://linux.die.net/man/2/readlink. –
Los alias de Finder no son enlaces simbólicos. Finder admite ambos, pero crea alias. –
-[NSFileHandle readDataOfLength:].
NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:filePath];
NSData *fileData = [handle readDataOfLength:N];
[handle closeFile];
¿Puedes dar un ejemplo, por favor? –
[[NSFileHandle fileHandleForReadingAtPath: ruta] readDataOfLength: length] –
Si está siguiendo el comentario anterior, asegúrese de llamar a -closeFile en el identificador después. – Dov
Si desea tener acceso aleatorio a los contenidos del archivo de una manera similar a la de haber cargado a través de NSData pero sin llegar a leer todo en la memoria, se puede utilizar la asignación de memoria. Si lo hace, significa que el archivo en el disco se trata como una sección de la memoria virtual, y se colocará una paginación dentro y fuera de la memoria virtual regular.
NSError * error = nil;
NSData * theData = [NSData dataWithContentsOfFile: thePath
options: NSMappedRead
error: &error];
Si no se preocupan por conseguir detalles de los errores del sistema de archivos, sólo se puede utilizar:
NSData * theData = [NSData dataWithContentsOfMappedFile: thePath];
A continuación, sólo podría utilizar el método de NSData -getBytes:range:
de sacar piezas específicas de los datos, y sólo el las partes relevantes del archivo se leerán del almacenamiento permanente; también serán elegibles para ser localizados.
Esa es una idea genial, no hubiera pensado en eso. Recuerde que al mapear archivos en la memoria, es discutible que sea aún más crítico asegurarse de liberar el objeto correctamente, ya que las filtraciones tienen un efecto más amplio. –
¿sabe si esto es diferente de NSInputStream * stream = [NSInputStream inputStreamWithFileAtPath: thePath]; [lectura de la secuencia: theBuffer maxLength: 255]; ? supongo que son idénticos – valexa
NSInputStream leerá fragmentos del sistema de archivos discretamente. Si está accediendo al archivo de forma secuencial, la transmisión es buena.Si necesita acceso aleatorio, entonces NSFileHandle o un objeto de datos mapeado son el camino a seguir, este último está más optimizado para el acceso aleatorio en general. –
- 1. Lectura de bytes sin formato desde un puerto en serie
- 2. Lectura desde un archivo app.config
- 3. ¿Cómo elimino un archivo de solo lectura?
- 4. ¿Cómo hacer un archivo de "solo lectura"?
- 5. ¿Generar bytes aleatorios Cocoa?
- 6. Eliminar los últimos N bytes del archivo
- 7. Abrir archivo de solo lectura
- 8. Lectura de un archivo Localization.strings desde * .ipa
- 9. ¿Cómo extraigo un solo fragmento de bytes de un archivo?
- 10. Copie n bytes de datos x en el archivo
- 11. de escritura y lectura cadenas a/desde un archivo interno
- 12. Lectura de bytes desde una cadena de JavaScript
- 13. ¿Es posible observar una propiedad de solo lectura de un objeto en Cocoa Touch?
- 14. ¿Puede Fortran leer los bytes directamente desde un archivo binario?
- 15. C# - Lectura de texto en ruso desde un archivo .txt
- 16. Comandos automáticos de Vim: ¿escribir un archivo de solo lectura?
- 17. ¿Puedo grep solo las primeras n líneas de un archivo?
- 18. SVN: ¿Cómo hacer un archivo de solo lectura con subversión?
- 19. SQLite/PHP de solo lectura?
- 20. Leer y escribir bytes desde un archivo (C++)
- 21. Crear un archivo ZIP desde una aplicación Cocoa
- 22. ¿Es posible eliminar bytes desde el comienzo de un archivo?
- 23. ¿Cuándo puede DataInputStream.skipBytes (n) omitir bytes?
- 24. Leer, modificar, escribir archivo xml en cocoa
- 25. La lectura de un archivo binario con el pitón
- 26. Lectura de un archivo sqlite local desde el teléfono
- 27. Lectura de un archivo Avro simple desde HDFS
- 28. Lectura de archivos desde un archivo ZIP incrustado
- 29. ¿Cómo hacer patrones de lectura "grep" desde un archivo?
- 30. Devolver un doble puntero de solo lectura
No sé cacao, pero: ¿por qué estás usando 'int' en lugar de' char'? – poundifdef
En este ejemplo, el archivo completo debe leerse antes de leer esos N bytes. En mi caso, cuando el archivo tiene aproximadamente 900 MB, este método parece ser un poco "duro" –
Un int tiene al menos dos bytes (generalmente 4), y originalmente lo escribí para usar char, que generalmente es de un byte. Por lo general, creo que es mejor no suponer que cualquier tipo tenga un número específico de bytes. Eso es probablemente atribuible a mis días en UNIX :-) – Alex