2011-02-05 12 views
6

Otra pregunta de Adobe Air para usted pero primero aquí algunos antecedentes del proyecto con los que me han encargado. Es una aplicación de AIR que leerá los activos de una llave USB y debe funcionar tanto en WIN como en MacOS. El problema es cómo cargar activos en la aplicación en MacOS. Suena bastante simple y funciona a la perfección en Windows.Adobe AIR y diferentes sistemas de archivos del sistema operativo

Aquí es un fragmento de código de lo que estoy tratando de hacer:

  var loader:Loader = new Loader(); 
      loader.contentLoaderInfo.addEventListener(Event.COMPLETE, ok); 
      loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError); 

      var p:String; 

      if (os == "mac") 
      { 
       p = "/Volumes/" + keyVolume.rootDirectory.name + File.separator + "0a0ff0ff-f7ae-4b9c-9637-843b1d6c80e8.jpg"; 
      } 
      else 
      { 
       p = keyVolume.rootDirectory.name + File.separator + "0a0ff0ff-f7ae-4b9c-9637-843b1d6c80e8.jpg"; 
      } 

      var temp:File = new File(p); 
      Debugger.Display.text += "\nAttempting to load: " + p; 
      Debugger.Display.text += "\nDoes it exist? " + temp.exists; 
      loader.load(new URLRequest(p)); 

... el sistema operativo variable y keyVolume se están estableciendo con éxito en el código anterior. Además, tengo las devoluciones de llamada del detector de eventos definidas también para ok() y ioErro().

Cuando esto se ejecuta imprime en las ventanas:

El intento de carga: G: \ 0a0ff0ff-f7ae-4b9c-9637-843b1d6c80e8.jpg
¿Existe: verdadero

... y luego carga con éxito el activo.

en MacOS, imprime:

El intento de carga: /Volumes/AC/0a0ff0ff-f7ae-4b9c-9637-843b1d6c80e8.jpg
¿Existe: verdadero

... y luego falla con un IOError cada vez.

¿Alguien puede ver algo que me falta aquí? ¿Tengo algún tipo de error de permiso o algo así (el archivo tiene acceso de "lectura/escritura")? La llave USB está formateada en MS-DOS FAT32, ¿podría ser un problema?

EDITAR

he formateado un duplicado de la llave USB en MacOS a FAT16 y poner los archivos en él sin éxito. Los problemas permanecen

EDITAR

ahora estoy tratando de cargar un activo desde/usuarios/-USERNAME-/escritorio y todavía estoy recibiendo el mismo error, por lo que parece que no es un problema de permisos en un solo la memoria USB, está más extendida que eso.

EDITAR

problema resuelto! Finalmente redacté mi búsqueda en Google correctamente y es revealed the answer.

Estos cambios solucionar el problema:

  var loader:Loader = new Loader(); 
      loader.contentLoaderInfo.addEventListener(Event.COMPLETE, ok); 
      loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError); 

      var p:String = keyVolume.rootDirectory.nativePath + ((os == "mac") ? File.separator : "") + "0a0ff0ff-f7ae-4b9c-9637-843b1d6c80e8.jpg"; 
      var temp:File = new File(p); 
      Debugger.Display.text += "\nAttempting to load: " + temp.url; 
      Debugger.Display.text += "\nDoes it exist? " + temp.exists; 
      loader.load(new URLRequest(temp.url)); 

también han refinado la declaración lógica que implica la detección de sistema operativo un poco también.

¡Espero que alguien encuentre esto útil!

+0

FAT32 debería estar totalmente bien. ¿Tienes más información sobre el IOError? – Ben

+0

¿Cuál es la diferencia "AC" en las rutas? – Ben

+0

La "AC" en MacOS es el nombre de la unidad. No tiene en cuenta la ruta de Windows, ya que utiliza letras de unidad. – nokturnal

Respuesta

1

¡PROBLEMA RESUELTO! Finalmente redacté mi búsqueda en Google correctamente y es revealed the answer.

Estos cambios solucionar el problema:

  var loader:Loader = new Loader(); 
      loader.contentLoaderInfo.addEventListener(Event.COMPLETE, ok); 
      loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError); 

      var p:String = keyVolume.rootDirectory.nativePath + ((os == "mac") ? File.separator : "") + "0a0ff0ff-f7ae-4b9c-9637-843b1d6c80e8.jpg"; 
      var temp:File = new File(p); 
      Debugger.Display.text += "\nAttempting to load: " + temp.url; 
      Debugger.Display.text += "\nDoes it exist? " + temp.exists; 
      loader.load(new URLRequest(temp.url)); 

también han refinado la declaración lógica que implica la detección de sistema operativo un poco también.

¡Espero que alguien encuentre esto útil!

Cuestiones relacionadas