My Air 2.5应用程序需要在某些自定义文件夹中保存一些文本文件。
目前我正在使用文档文件夹来保存文件(使用FileStream),这很好用。但我需要将其保存在任何文件夹中。
有没有办法在任何目标文件夹中保存文件? (使用FileStream)
答案 0 :(得分:0)
自1.5以来Adobe AIR docs的内容很好:
除非用户计算机存在管理员限制,否则AIR应用程序有权写入用户硬盘上的任何位置。
另请阅读Best security practices for developers。
举个例子,您可以使用以下方式访问桌面:
File.desktopDirectory.resolvePath(your_path);
答案 1 :(得分:0)
如果您拥有管理员权限,则可以将文件保存在File.ApplicationDirectory中的任何位置(但您将遇到安全性错误)。
但是有一个黑客:
var fs : FileStream = new FileStream;
var errorFile : File = File.applicationDirectory.resolvePath("foo.txt");
try{
// Error
fs.open(errorFile, FileMode.WRITE);
}catch(e:Error){
trace("Security error");
}
var okFile : File = new File(File.applicationDirectory.resolvePath("foo.txt").nativePath);
// No error
fs.open(okFile, FileMode.WRITE);
答案 2 :(得分:0)
我有工作的解决方案。它将文件保存到您的目标文件夹。它可能会对你有帮助。
/*Requires AIR 2.5 (May be AIR 2.0. I have not tested) and Flash CS6.*/
import flash.filesystem.*;
import flash.utils.ByteArray;
//Sample XMl
var xml:XML = <audio>song1.mp3</audio>;
var outputString:String = '<?xml version="1.0" encoding="utf-8"?>\n';
outputString += xml.toXMLString();
outputString = outputString.replace(/\n/g,File.lineEnding);
//Byte array
var xmlData:ByteArray = new ByteArray();
xmlData.writeUTFBytes(outputString);
//Targeted custom folder
var urlStr:String = "file:///D:/Temp/"; // you can get this URL from external text file
var audioXMLFile:File = new File();
audioXMLFile.url = urlStr;
audioXMLFile = audioXMLFile.resolvePath("SongList.xml");
//File stream
var outStream:FileStream = new FileStream();
outStream.addEventListener(Event.CLOSE, dataSaved, false, 0, true);
outStream.addEventListener(OutputProgressEvent.OUTPUT_PROGRESS, savingProgress, false, 0, true);
//open output file stream in WRITE mode
outStream.openAsync(audioXMLFile, FileMode.WRITE);
//write out the file
outStream.writeBytes(xmlData, 0, xmlData.length);
//Saving progress
function savingProgress(e:OutputProgressEvent):void
{
if (e.bytesPending == 0)
{
//Close stream on save
e.target.close();
}
}
//
function dataSaved(e:Event):void
{
trace("File Saved");
}