我需要使用一些设置保存XML,并希望将它们保存为我自己的文件类型(例如.genconf)。当我使用..
var f:FileReference = new FileReference();
f.save( MyByteArray);
..我可以允许用户浏览保存,但如果他们手动输入(他们肯定不会),它只使用扩展名。
有没有办法检查他们输入的文件名,并在写入文件之前修改/附加它?
答案 0 :(得分:3)
这里是我最终如何做到的(使用AIR):
//on save clicked
public function export(e:MouseEvent){
var file:File = File.desktopDirectory;
file.browseForSave("Save");
file.addEventListener(Event.SELECT, onSaveSelect);
}
public function onSaveSelect(e:Event){
//create XML stuff here
var config:XML = new XML(<config />)
// compressing before saving
var bytes:ByteArray = new ByteArray();
bytes.writeUTFBytes( config );
bytes.compress();
//get browse location
var saveFile:File = File(e.target);
var directory:String = saveFile.url;
//check if by miracle they put the extension in, then add it
if(directory.indexOf(".genconf ") == -1){
directory += ".genconf ";
}
//use the new path with the extension
var file:File = new File();
file = file.resolvePath(directory);
var fileStream:FileStream = new FileStream();
fileStream.addEventListener(Event.CLOSE, onClose);
fileStream.openAsync(file, FileMode.WRITE);
fileStream.writeBytes(bytes);
fileStream.close();
}
答案 1 :(得分:1)
我认为出于Flash安全原因,您无法以任何方式强制执行文件扩展名,此外,用户键入的文件名是只读信息,因此您无法对其进行修改。
因此,对于您的情况,您希望保存带有.genconf
扩展名的文件,我认为您可以:
OR
在所有情况下,您都会得到如下代码:
const extension:String = '.genconf';
var file_ref:FileReference = new FileReference()
file_ref.save('your_data', 'default_file_name' + extension);
希望可以提供帮助。