Если при выборе нескольких файлов происходит сбой приложения, я могу думать только о некоторых обходных путях ...
Вариант 1) Почему бы не изменить логику? Попробуйте как:
- Пользователь будет просматривать / выбирать один JPEG из необходимой папки.
- Затем ваше приложение автоматически сканирует ту же папку, чтобы получить все имена файлов с текстом
.jpg
в каждом отдельном файле file.name
или file.url
.
Вариант 2) Используйте внешнюю программу для получения списка имен файлов. Если вы работаете в Windows, вы можете использовать командную строку ( например: cmd.exe
с опцией dir
). Что-то вроде ...
Используйте cmd.exe /K "cd /d e:\myImagesFolder\"
для запуска командной строки с E:\
диска myImagesFolder
.
Затем используйте dir *.jpg
, чтобы получить список всех jpegs в папке.
Может быть, получение выходных данных командной строки в вашем приложении AIR могло бы стать решением проблемы сбоя?
Код ниже не протестирован, но вы хотите использовать эту логику для вывода из командной строки:
(не открывается окно терминала, это тихий / невидимый запуск, но вы можете увидеть cmd.exe
в списке в диспетчере задач):
var file_selected :File = File.documentsDirectory;
var user_Folder_Path : String = ""; //# update with User folder path (after they selected 1 file)
var str_Temp : String = "";
var str_Files : String = "";
var processInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
var processArgs:Vector.<String> = new Vector.<String>();
var process:NativeProcess = new NativeProcess();
function selectFile (e :MouseEvent) :void
{
file_selected.browseForOpen("Selecionar fotos:", [jpgFilter]);
file_selected.addEventListener(Event.SELECT, fileSelected);
}
function fileSelected(event:Event):void
{
str_Temp = fileToOpen.nativePath;
//# trim down to folder path eg: remove file name part
user_Folder_Path = str_Temp.substring(0, str_Temp.lastIndexOf("\") );
str_Temp = str_Files = ""; //reset both strings
if(NativeProcess.isSupported)
{
processInfo.executable = new File("C:/Windows/System32/cmd.exe");
processArgs.push("dir *.jpg" + " " + user_Folder_Path );
processInfo.arguments = processArgs;
process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, std_onStandardOutputData);
process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, std_onError);
process.start(processInfo);
process.standardInput.writeUTFBytes(processArgs + "\n");
}
}
function std_onStandardOutputData(evt:ProgressEvent):void
{
var process:NativeProcess = evt.target as NativeProcess;
var data:String = process.standardOutput.readUTFBytes(process.standardOutput.bytesAvailable);
str_Files += data; //holds file names as they come in from CMD.exe
}
function std_onError(evt:ProgressEvent):void
{
var process:NativeProcess = evt.target as NativeProcess;
var data:String = process.standardError.readUTFBytes(process.standardError.bytesAvailable);
str_Temp += data; //holds other text data from CMD...
}