在没有“另存为”对话框的情况下使用fileReference.Save自动保存到xml

时间:2013-04-22 03:18:47

标签: actionscript-3 flash-cs6

我正在尝试将从我的应用程序中收集的数据保存到其附带的名为data.xml的外部xml文件中。我正在使用fileReference.save方法,但它似乎没有完成这项工作:

function parseXML(xmlData:XML):void
{
    trace("Parsing:");
    trace("-----------------");
    var itemIndex:uint = event.currentTarget.index;
    delete data.item[itemIndex];
    fileReference.save(data, "data.xml");
    trace(xmlData);
}

不幸的是,这会导致弹出一个“另存为”对话框,询问用户他们想要保存xml文件的位置(当我真正想要发生的是项目目录中的data.xml文件时)自动覆盖,用户方面没有任何发言权。)

我听说FileStream是要走的路(特别是我要在Air for iOS上部署它),但我不知道如何实现它。

有什么想法吗?

编辑:我已根据以下建议更新了我的问题,但仍然无效。 data.xml文件位于我的桌面上名为'RecipeMatcher2'的同一目录中,即/ Desktop / RecipeMatcher2 /(我使用的是Mac OS X),但我也希望它解析为文件存储的任何路径在iPhone上。

function parseXML(xmlData:XML):void
{
    trace("Parsing:");
    trace("-----------------");
    var itemIndex:uint = event.currentTarget.index;
    file = File.applicationStorageDirectory;
    file = file.resolvePath("data.xml");
    delete data.item[itemIndex];
    var writeStream:FileStream = new FileStream();
    writeStream.open(file, FileMode.WRITE);
    writeStream.writeUTFBytes(data.toXMLString());
    writeStream.close();
    trace('xml file saved');
}

我最初加载我的xml数据是这样的:

loader = new URLLoader();
// listens to see if data has fully loaded//
loader.addEventListener(Event.COMPLETE, dataLoaded);
//loads local xml file with URLrequest method//
loader.load(new URLRequest("data.xml"));

以下是与此问题相关的公共变量:

public var loader:URLLoader;
public var file:File;
public var data:XML;
public var items:XMLList;

1 个答案:

答案 0 :(得分:1)

FileReference类对于Web浏览器是安全的,因为它不会让您在未经他同意的情况下弄乱用户文件。

但是,在使用AIR时,您可以使用扩展File的{​​{1}}类。 看看this link,了解它们之间的区别。

以下是如何使用FileReference类:

FileStream

您可以在此处详细了解FileStream class


编辑:查看您当前编辑的问题,我建议您使用var file:File = new File().resolvePath("myFile.txt"); var stream:FileStream = new FileStream(); stream.open(file, FileMode.WRITE); stream.writeUTF("Hello world!"); stream.close(); / File加载xml数据,如下所示:

FileReference

正如您所看到的,一旦我们在文件系统中获得对文件的引用,我们就可以自由地从/向它读取/写入数据。