2009-06-15 6 views
17

Estoy intentando cargar un archivo en una cadena. Aquí está el código que estoy usando:NSString stringWithContentsOfFile que falla con lo que parece ser el código de error incorrecto

NSError *error = nil; 
NSString *fullPath = [[NSBundle mainBundle] pathForResource:filename 
                ofType:@"html"]; 
NSString *text = [NSString stringWithContentsOfFile:fullPath 
              encoding:NSUTF8StringEncoding 
               error:&error]; 

Cuando aprobada en @ "acerca de", como el nombre del archivo, funciona absolutamente bien, mostrando el código funciona. Cuando se pasa en @ "eula" como el nombre del archivo, falla con 'Cocoa error 258', que se traduce en NSFileReadInvalidFileNameError. Sin embargo, si cambio el contenido de los archivos pero mantengo los nombres iguales, el otro archivo falla y demuestra que no hay nada de malo en el nombre del archivo, es algo que tiene que ver con el contenido.

El archivo sobre es bastante simple HTML pero el archivo eula es un lío masivo exportado desde Word por el departamento legal.

¿Alguien sabe de algo dentro de un archivo HTML que podría provocar este error?

Muchas gracias,

Sam

Respuesta

8

El error es casi seguro que su archivo no está en UTF-8, pero tiene razón, eso suena como un error en el informe de errores.

Abra el archivo eula con BBEdit (o el TextWrangler gratuito) y vea qué codificación utiliza. Cambia la codificación a UTF-8 y guárdala. Diff los dos archivos para ver qué diferencias han aparecido. Reemplace el archivo original con el nuevo (arreglando cualquier falla).

Si eso resuelve el problema, utilice el Apple Bug Reporter para informar el error en el informe de errores.

3

La razón más probable de que +stringWithContentsOfFile:encoding:error: fallarían en este caso sería si proporcionó la codificación incorrecta. ¿Estás seguro de que tu archivo @"eula" está codificado en UTF8?

Si no está seguro acerca de la codificación del archivo, siempre puede probar +stringWithContentsOfFile:usedEncoding:error: y ver si funciona y qué codificación se le ocurre.

10

Acabo de pasar 45 minutos con este problema, solo en mi caso la solución fue estúpida y el problema fue ligeramente diferente.

  • Tenía un archivo llamado Playlist.txt en mi directorio de recursos. Estaba cargando bien.
  • El archivo se modificó en un punto, desde XCode.
  • El archivo dejó de cargarse correctamente, con el mismo error que el anterior. Sin embargo, nunca se había movido ni se había cambiado su tipo de codificación.
  • Hice un comando-I (Obtener información) en el archivo en el directorio XCode, me dijo que era UTF-8 (como se esperaba).
  • Probé la forma "usedEncoding" de leer archivos, sin dados. El mismo error, la codificación fue return null.
  • Finalmente, borré el archivo de XCode, lo arrastré de nuevo e hice un Clean All. Eso solucionó el problema.

Esta no es la primera vez que el código XCode cosas en caché mágico (incorrectamente) me ha causado horas y horas de tiempo perdido.Si tiene un error como este que no tiene sentido, intente eliminar y reemplazar archivos y limpiar todos los objetivos.

0

No sé si este es su problema, pero acabo de tener algo similar (stringWithContentsOfFile, no JSON), y el problema es que el archivo tiene terminaciones de línea CRLF (windows) y Western-lo que sea-es- llamada codificación Utilicé SubEthaEdit para convertir a LF y UTF-8, y todo funciona bien.

+0

Honestamente, acabo de abrirlo, jugué un poco con él, cambié la codificación y la guardé de nuevo; o era un personaje no válido en algún lugar del archivo o algo así como lo que encontraste - una línea que termina/problema de codificación. ¡Fue el mensaje de error muy engañoso que me arrojó! – deanWombourne

4

Tuve el mismo error contigo, utiliza el nombre de archivo con [[NSBundle mainBundle] pathForResource: @ "pageList" ofType: @ "txt"]] ¡buena suerte!

0

Me encontré con el mismo error.

Cuando jugué un poco, parecía que no estaba incluyendo el archivo en los recursos del paquete de copia del objetivo.

Lo hice y funcionó bien.

Pero, tengo que decir que el error es bastante engañoso por una causa tan simple. Solo una mala suposición de Xcode

Cuestiones relacionadas