Một câu hỏi khác của Adobe Air cho bạn nhưng trước tiên hãy xem một số thông tin cơ bản về dự án mà tôi đã được giao nhiệm vụ. Nó là một ứng dụng AIR sẽ đọc tài sản từ một khóa USB và phải làm việc trên cả WIN và MacOS. Vấn đề là, làm cách nào để tải nội dung vào ứng dụng trên MacOS! Âm thanh đủ đơn giản và hoạt động liên tục trên Windows.Adobe AIR và các hệ thống tệp hệ điều hành khác nhau
Đây là một đoạn mã của những gì tôi đang cố gắng để làm:
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, ok);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError);
var p:String;
if (os == "mac")
{
p = "/Volumes/" + keyVolume.rootDirectory.name + File.separator + "0a0ff0ff-f7ae-4b9c-9637-843b1d6c80e8.jpg";
}
else
{
p = keyVolume.rootDirectory.name + File.separator + "0a0ff0ff-f7ae-4b9c-9637-843b1d6c80e8.jpg";
}
var temp:File = new File(p);
Debugger.Display.text += "\nAttempting to load: " + p;
Debugger.Display.text += "\nDoes it exist? " + temp.exists;
loader.load(new URLRequest(p));
... biến hệ điều hành và keyVolume đang được thiết lập thành công trong mã trước đó. Ngoài ra, tôi có các callback event listener được định nghĩa là ok() và ioErro().
Khi điều này được chạy nó in ra trên cửa sổ:
Cố gắng tải: G: \ 0a0ff0ff-f7ae-4b9c-9637-843b1d6c80e8.jpg
Liệu nó tồn tại: true
... và sau đó tải thành công nội dung.
On MacOS, nó in ra:
Cố gắng tải: /Volumes/AC/0a0ff0ff-f7ae-4b9c-9637-843b1d6c80e8.jpg
Liệu nó tồn tại: true
... và sau đó không thành công với IOError mỗi lần.
Có ai có thể thấy thứ gì đó mà tôi thiếu ở đây không? Tôi có một số loại lỗi cho phép hoặc một cái gì đó (tập tin có "đọc/ghi" truy cập). Khóa USB được định dạng trong MS-DOS FAT32, đó có phải là vấn đề không?
EDIT
tôi định dạng một chìa khóa USB mới trong hệ điều hành MacOS để FAT16 và đưa các tập tin vào nó không thành công. Vấn đề vẫn còn.
EDIT
bây giờ tôi chỉ cố gắng để tải một tài sản từ/users/-USERNAME-/Desktop và vẫn đang nhận được lỗi tương tự, vì vậy nó có vẻ như nó không phải là một vấn đề quyền trên chỉ thanh USB, nó phổ biến rộng hơn thế.
EDIT
vấn đề giải quyết! Cuối cùng tôi đã từ từ tìm kiếm của Google chính xác và nó revealed the answer.
Những thay đổi này sẽ khắc phục vấn đề:
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, ok);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError);
var p:String = keyVolume.rootDirectory.nativePath + ((os == "mac") ? File.separator : "") + "0a0ff0ff-f7ae-4b9c-9637-843b1d6c80e8.jpg";
var temp:File = new File(p);
Debugger.Display.text += "\nAttempting to load: " + temp.url;
Debugger.Display.text += "\nDoes it exist? " + temp.exists;
loader.load(new URLRequest(temp.url));
Tôi cũng đã tinh chế báo cáo kết quả logic liên quan đến việc phát hiện hệ điều hành một chút là tốt.
Tôi hy vọng ai đó thấy điều này hữu ích!
FAT32 phải hoàn toàn ổn. Bạn có thêm thông tin về IOError không? – Ben
Sự khác biệt "AC" trong đường dẫn là gì? – Ben
"AC" trong MacOS là tên ổ đĩa. Nó không ảnh hưởng đến đường dẫn cửa sổ vì nó sử dụng các ký tự ổ đĩa. – nokturnal