0

我的 Air 2.5 应用程序需要在一些自定义文件夹中保存一些文本文件。

目前我正在使用文档文件夹来保存文件(使用 FileStream),效果很好。但我需要将它保存在任何文件夹中。

有没有办法将文件保存在任何目标文件夹中?(使用文件流)

4

3 回答 3

0

自 1.5 以来,根据Adob​​e AIR 文档的说法:

除非对用户的计算机有管理员限制,否则 AIR 应用程序有权写入用户硬盘驱动器上的任何位置。

另请阅读面向开发人员的最佳安全实践

例如,您可以使用以下命令进入桌面:

File.desktopDirectory.resolvePath(your_path);
于 2012-07-09T14:35:47.663 回答
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);
于 2012-07-09T14:36:42.007 回答
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");
}
于 2012-07-10T06:16:33.017 回答