2010-05-20 6 views

risposta

15

Non è consigliato, ma è possibile. Costruisci il tuo riferimento in questo modo:

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

non so da chi non è raccomandato, ma probabilmente è l'unico modo per creare un file di impostazioni che viene eliminato con il app. –

+0

In una versione di rilascio, questo codice FAIL se si tenta di scrivere! ADL consentirà di scrivere file nella directory dell'applicazione, ma non nella versione di AIR. L'intera applicazione è checksum e verificata al caricamento. – ansiart

+0

@ansiart Utilizzando questa soluzione, ho esportato un rilascio build e installato. Ho eseguito l'app, nessun problema. Ho chiuso l'app e ho ripreso a correre aspettando gli errori di checksum senza problemi. Ho confermato che i miei file copiati esistevano ancora nella directory dell'app. (FB4.6) Ho anche controllato il pacchetto aria per confermare che non ho inserito accidentalmente i file nella versione. C'è qualche opzione che mi manca che causa la rottura di questa soluzione. – CrashCodes

9

Non è possibile scrivere nella directory dell'applicazione dell'app AIR, non è consentito. Tuttavia, è possibile scrivere in una cartella creata dall'app AIR nella directory dell'utente, denominata Directory di archiviazione applicazioni. Se hai bisogno di file di configurazione e simili, probabilmente è il posto migliore dove metterli. Vedere 'applicationDirectory' nella documentazione link sottostante:

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

2

Le opere risposta accettata!

Ma se faccio questo, invece:

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. Tuttavia, se utilizzo applicationStorageDirectory, il codice sopra funzionerà. Funzionerà solo se è applicationDirectory. Inoltre, la documentazione di Adobe afferma anche che un'app AIR non può scrivere nella sua directory application.

Ora, mi chiedo se è un errore da parte di Adobe che consentono di scrivere nella directory application utilizzando il modo suggerito dalla risposta accettata.

+0

Su Mac, sono stato in grado di creare una cartella utilizzando applicationDirectory in questo percorso: /Users/administrator/Library/Preferences/Main/Local Store/thumbAppStorageDir, ma dopo non sono riuscito a eseguire nuovamente le stesse linee di codice. Wierd. –

1

provare questo.

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

l'uscita sarebbe come questo ...

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

Questo funziona bene.

1

Se si desidera scrivere il file in ApplicationDirectory, giusto?

Si prega di non dimenticare per scrittura per NativeProcess tramite PowerShell con chiave di registro per l'applicazione Adobe currect (esempio: C: \ Program Files (x86) \ AirApp \ AirApp.exe con RunAsAdmin)

  1. NativeProcess salva nuovo file di registro
  2. AirApp si riavvia in RunAsAdmin
  3. AirApp può essere scrivibile possibile con file di :)

non ti preoccupare!

Conosco quel trucco come a volte l'applicazione di scrittura prima attraverso il file di registro e chiama powershell scrivendo il processo nativo nel file di registro nelle strutture del registro.

apparire come il mio suggerimento da Adobe schede di sistema/forum era meglio di problema di accesso con la scrittura flusso con il file :)

spero, perché si sa il mio bel trucco con NativeProcess tramite PowerShell + regedit/s \ AirApp. reg e AirApp si trasforma in AirApp amministrato di quanto funzioni correttamente con la modalità Administratived :) Rispondere alla soluzione e provare - Assicurati per il tuo processo di scrittura da AirApp.

2

@glendon se si tenta di salvare direttamente in applicationDirectory verrà effettivamente generato un errore, ma sembra che si possa spostare il file nel filesystem. ho usato il codice qui sotto dopo il vostro:

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); 

il motivo per cui '' shouldnt utilizzare la cartella applicazione è perché non tutti gli utenti hanno il diritto di salvare i file in tale cartella, mentre tutti saranno in applicationStorageDirectory.

+0

Buona soluzione. Bene ... dovrei usare la cartella dell'applicazione nella mia app AIR Desktop. Grazie. –

0

questa funzione dà cartella dell'applicazione corrente dell'aria che bypassa il problema della sicurezza:

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; 
    }