AS3 SharedObject读/写文件位置更改



我使用以下AS3代码将两个阵列中的数据写入和读取到本地文件,在Windows 10上使用Animate CC 2019,在Desktop/Flash(.swf(发布设置中使用AIR 30.0。我使用两个输入文本框,input1&input2,以向数组添加新数据。

当我测试FLA时,创建的数据文件具有.sol扩展名,并放置在文件夹路径中:

C: \Users\username\AppData\Roaming\FLA filename\Local Store#SharedObjects\FLA filename]swf\

如果我使用.air安装程序包发布和安装程序,则安装的程序版本也会访问位于相同文件夹路径中的完全相同的文件。如果我在另一台运行Windows7的计算机上安装,会使用相同的位置,所以文件位置看起来非常一致。

问题:如何强制将代码保存到Windows本地硬盘上的其他位置?例如,在文档文件夹中,还是在系统驱动器上创建一个新文件夹并将文件保存在那里?或者,更好的是,提示用户自己选择文件夹和文件?

如果可能的话,请考虑我正在使用SharedObject寻找答案,而不是URLLoader、File、FileStream、FileMode等替代方法。原因是通过这种方式,我可以在一个文件中存储多个数组内容,而不必处理文件中的数据排列。因此,我可以很容易地读回每个数组的数据,如下所示。

提前感谢

这是我用来访问本地文件的代码:

var datavariable:SharedObject = SharedObject.getLocal("filiename");
var data1:Array = new Array ();
var data2:Array = new Array ();
btn_read.addEventListener(MouseEvent.CLICK, readfromfile);
btn_write.addEventListener(MouseEvent.CLICK, writetofile);
btn_new.addEventListener(MouseEvent.CLICK, newentry);
//To add new data from input text boxes to the arrays:
function newentry(e:Event):void
{
data1.push(input1.text);
data2.push(input2.text);
}
//To write to the local file:
function readfromfile(e:Event):void
{
data1 = datavariable.data.d1
data2 = datavariable.data.d2    
}
//To read from the local file:
function writetofile(e:Event):void
{
datavariable.data.d1 = data1
datavariable.data.d2 = data2
datavariable.flush();
}

我不知道如何更改共享对象存储位置。该机制是从开发人员那里抽象出来的。

由于您使用AIR,您实际上可以忘记共享对象,只需在应用程序允许的任何地方编写自己的文件。您可以使用与共享对象相同的格式来完成此操作,并且不必担心文件中的数据排列(您保存一个对象,读取一个对象-就像共享对象一样(,唯一的区别是在您选择的位置加载/保存文件。

这里有一个例子:

function writetofile(e:Event):void
{
//create an object that holds your data, this will act the same as the 'data' value of a shared object
var saveObject = {
d1: data1,
d2: data2
}
//using the File and FileStream classes to read/save files
var file:File = File.applicationStorageDirectory.resolvePath("saveData.data"); //or where and whatever you want to store and call the save file
var fileStream:FileStream = new FileStream();
fileStream.open(file, FileMode.WRITE);
fileStream.writeObject(saveObject); //write the object to this file
fileStream.close(); //close the File Stream
}
function readfromfile(e:Event):void
{
var file:File = File.applicationStorageDirectory.resolvePath("saveData.data");
var fileStream:FileStream = new FileStream();
fileStream.open(file, FileMode.READ);
var savedObject = fileStream.readObject();
fileStream.close();
data1 = savedObject.d1;
data2 = savedObject.d2;    
}

如果要保存复杂对象(不是基元的对象(,则需要先注册该类。这也适用于共享对象。看看这个答案的例子。

相关内容

  • 没有找到相关文章

最新更新