2015-01-15 3 views
0

Мне нужно сохранить XML с некоторыми настройками и захотеть сохранить их как собственный тип файла (например, .genconf). Когда я использую ..FileReference.save, обеспечивающий его расширение

var f:FileReference = new FileReference(); 
f.save(MyByteArray); 

..Я может позволить пользователю просматривать, чтобы сохранить, но он использует только расширение, если они входят в вручную (что они, безусловно, привычка).

Есть ли способ проверить введенное имя файла и изменить/добавить его до того, как файл будет записан?

ответ

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(); 
} 
+0

Я положил мой ответ при условии, что вам это нужно для вспышки, потому что с AIR мы, безусловно, больше возможностей и гибкости;) – akmozo

+0

да, извините о том, что я должен был пометить его и для AIR. Спасибо за ваш ответ. – JonnyW

1

Я думаю, что по соображениям безопасности Flash вы не можете принудительно форсировать расширение файла, кроме того, имя файла, введенное пользователем, является информацией только для чтения, поэтому вы не можете ее изменить.

Так что для вашего дела, вы хотите сохранить файлы с расширением .genconf, я думаю, что вы можете:

  • Запрос имя файла для вашего пользователя, прежде чем показывать диалог сохранения, а затем добавить расширение чтобы иметь имя файла по умолчанию для диалога сохранения.

ИЛИ

  • Фикс имя файла по умолчанию с расширением, используя временную метку, рандомизированное имя, ... и требовать вашего пользователя, чтобы сохранить файл напрямую, без изменения имени.

Во всех случаях вы получите код, как это:

const extension:String = '.genconf'; 

var file_ref:FileReference = new FileReference()  
    file_ref.save('your_data', 'default_file_name' + extension); 

Надежда, которая может помочь.

Смежные вопросы