2010-05-20 6 views

Respuesta

15

No es recomendable, pero es posible. Construya su referencia de archivo de esta manera:

var pathToFile:String = File.applicationDirectory.resolvePath('file.txt').nativePath; 
var someFile:File = new File(pathToFile); 
+0

No sé por que no se recomienda, pero probablemente es la única manera de crear un archivo de configuración que se elimina con el aplicación –

+0

En una compilación de versión, ¡este código fallará si intentas escribir! ADL le permitirá escribir archivos en el directorio de la aplicación, pero no el lanzamiento de AIR. Toda la aplicación se comprueba y verifica en la carga. – ansiart

+0

@ansiart Utilizando esta solución, exporté una compilación de lanzamiento e instalé. Ejecuté la aplicación, no hay problema. Cerré la aplicación y corrí de nuevo esperando los errores de suma de comprobación sin problemas. Confirmé que mis archivos copiados aún existían en el directorio de la aplicación. (FB4.6) También verifiqué el paquete de aire para confirmar que no puse accidentalmente los archivos en el lanzamiento. ¿Hay alguna opción que me falta que hace que esta solución se rompa? – CrashCodes

9

No puede escribir en el Directorio de aplicaciones de la aplicación AIR, no está permitido. Sin embargo, puede escribir en una carpeta que crea su aplicación de AIR en el directorio del usuario, llamado Directorio de almacenamiento de aplicaciones. Si necesita archivos de configuración y similares, ese es probablemente el mejor lugar para ponerlos. Ver 'applicationDirectory' en la documentación enlace de abajo:

http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/

2

¡La respuesta aceptada funciona!

Pero si hago esto en su lugar:

var vFile = File.applicationDirectory.resolvePath('file.txt'); 
var vStream = new FileStream(); 
vStream.open(vFile, FileMode.WRITE); 
vStream.writeUTFBytes("Hello World"); 
vStream.close(); 

Dará SecurityError: fileWriteResource. Sin embargo, si utilizo applicationStorageDirectory, el código anterior funcionará. NO funcionará si es applicationDirectory. Además, la documentación de Adobe también dice que una aplicación de AIR no puede escribir en su applicationDirectory.

Ahora, me pregunto si es un error por parte de Adobe que permiten escribir en el directorio de la aplicación utilizando la manera sugerida por la respuesta aceptada.

+0

En Mac, pude crear una carpeta una vez usando applicationDirectory en esta ruta: /Users/administrator/Library/Preferences/Main/Local Store/thumbAppStorageDir pero después de eso no pude volver a ejecutar las mismas líneas de código. Wierd. –

1

prueba esto.

var objFile:File = new File(“file:///”+File.applicationDirectory.resolvePath(strFilePath).nativePath); 

la salida sería así ...

file:///c:\del\userConf.xml 

Esto funcionará bien.

1

Si desea escribir un archivo en ApplicationDirectory, ¿no?

Por favor, no se olvide de escritura para NativeProcess a través de PowerShell con clave de registro para su aplicación Adobe currect (ejemplo: C: \ Archivos de programa (x86) \ AirApp \ AirApp.exe con RunAsAdmin)

  1. NativeProcess ahorra nuevo archivo de registro
  2. AirApp se reinicia en RunAsAdmin
  3. AirApp puede ser modificable posible con archivo :)

no se preocupe!

Conozco ese truco como que a veces la aplicación escribe frist a través de un archivo de registro y llama a powershell escribiendo nativeprocess en el archivo de registro en estructuras de registro.

parece mi sugerencia de adobe de las placas del sistema/foro fue mejor que el problema de acceso con la corriente de escritura con el archivo :)

espero que ya sabes mi buen truco con NativeProcess a través de PowerShell + regedit/s \ AirApp. reg y AirApp cambia a administrativa AirApp de lo que funciona bien con el modo Administrado :) Que su solución debe escribir e intentar - Asegúrese de que su proceso de escritura por AirApp.

2

@glendon si intenta guardar directamente en applicationDirectory arrojará un error, pero parece que puede mover el archivo en el sistema de archivos. He utilizado el código de abajo después de la suya:

var sourceFile:File = File.applicationStorageDirectory.resolvePath ("file.txt"); 
var pathToFile:String = File.applicationDirectory.resolvePath ('file.txt').nativePath; 
var destination:File = new File (pathToFile); 
sourceFile.moveTo (destination, true); 

la razón por la que no debería '' Usar la carpeta de la aplicación se debe a que no todos los usuarios tienen derechos para guardar archivos en dicha carpeta, mientras todo el mundo lo hará en applicationStorageDirectory.

+0

Buena solución. Bueno ... Debería usar la carpeta de la aplicación en mi aplicación AIR Desktop. Gracias. –

0

esta función da a su carpeta de la aplicación actual del aire que evita el problema de seguridad:

function SWFName(): String { 
     var swfName: String; 
     var mySWF = new File(this.loaderInfo.url).nativePath; 
     swfName= this.loaderInfo.loaderURL; 
     swfName = swfName.slice(swfName.lastIndexOf("/") + 1); // Extract the filename from the url 
     swfName = new URLVariables("path=" + swfName).path; // this is a hack to decode URL-encoded values 
     mySWF = mySWF.replace(swfName, ""); 
     return mySWF; 
    } 
Cuestiones relacionadas