FileReference.save 确保它有扩展名
FileReference.save ensuring it has extension
我需要用一些设置保存一个 XML,并想将它们保存为我自己的文件类型(例如 .genconf)。当我使用..
var f:FileReference = new FileReference();
f.save( MyByteArray);
..我可以允许用户浏览以保存,但如果他们手动输入(他们肯定不会),它只会使用扩展名。
有没有办法在写入文件之前检查他们输入的文件名,amend/append?
我认为出于Flash安全的原因,您不能以任何方式强制文件扩展名,另外用户输入的文件名是只读信息,因此您不能修改它。
所以对于你的情况,你想保存扩展名为 .genconf
的文件,我认为你可以:
- 在显示保存对话框之前向您的用户请求文件名,然后添加扩展名以获得保存对话框的默认文件名。
或
- 使用时间戳、随机名称等修复默认文件名和您的扩展名,并要求您的用户直接保存文件而不编辑名称。
在所有情况下,您都会得到这样的代码:
const extension:String = '.genconf';
var file_ref:FileReference = new FileReference()
file_ref.save('your_data', 'default_file_name' + extension);
希望能帮到你。
这是我最终的做法(使用 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();
}
我需要用一些设置保存一个 XML,并想将它们保存为我自己的文件类型(例如 .genconf)。当我使用..
var f:FileReference = new FileReference();
f.save( MyByteArray);
..我可以允许用户浏览以保存,但如果他们手动输入(他们肯定不会),它只会使用扩展名。
有没有办法在写入文件之前检查他们输入的文件名,amend/append?
我认为出于Flash安全的原因,您不能以任何方式强制文件扩展名,另外用户输入的文件名是只读信息,因此您不能修改它。
所以对于你的情况,你想保存扩展名为 .genconf
的文件,我认为你可以:
- 在显示保存对话框之前向您的用户请求文件名,然后添加扩展名以获得保存对话框的默认文件名。
或
- 使用时间戳、随机名称等修复默认文件名和您的扩展名,并要求您的用户直接保存文件而不编辑名称。
在所有情况下,您都会得到这样的代码:
const extension:String = '.genconf';
var file_ref:FileReference = new FileReference()
file_ref.save('your_data', 'default_file_name' + extension);
希望能帮到你。
这是我最终的做法(使用 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();
}