Ошибка # 3002 при записи в каталог хранилища приложения - PullRequest
0 голосов
/ 02 апреля 2012

Поэтому я пытаюсь скопировать файл, выбранный пользователем, в каталог хранилища приложения AIR, но при попытке определить путь в каталоге хранилища я получаю:

Ошибка #3002: файл или каталог существует.

Я получаю это, даже когда нет никакого возможного способа, которым файл уже существует (я почти уверен, что там нет "qqqqq.txt").

Мой код выглядитthis:

var saveFile:File = File.desktopDirectory;

saveFile.browseForOpen("Open File");    
saveFile.addEventListener(Event.SELECT, function(e:Event):void
    {
            txt.text = saveFile.nativePath;
            var destination:File = File.applicationStorageDirectory;
            destination = destination.resolvePath("files/moreInfo.txt");
               try
               { 
                saveFile.copyTo(destination, true);
                trace("Saved Attachment Success: "+destination.toString());
               }
               catch (error:Error)
                { trace("Error: "+ error.message); } 
    });

Ошибка выдается на строку, где я пытаюсь установить назначение в качестве applicationStorageDirectory, но я понятия не имею, почему.

Есть идеи?

Редактировать: Итак, я прокомментировал все, что ниже var destination:File = File.applicationStorageDirectory;, и оно ПО-прежнему выдает ошибку.

1 Ответ

1 голос
/ 03 апреля 2012

Когда вы вызываете resolPath, вы используете возвращаемое значение resolPath - оно не применяет разрешение к текущему объекту File.

Пример:

var prefsFile:File = File.applicationStorageDirectory;
prefsFile = prefsFile.resolvePath("preferences.xml");

Кроме того, кажется, что ваш файл назначения всегда: "files / moreInfo.txt"

Вот пример реализации, если вы просто пытаетесь выбрать файл для копирования в каталог хранилища приложения.

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
                       xmlns:s="library://ns.adobe.com/flex/spark"
                       xmlns:mx="library://ns.adobe.com/flex/mx">

    <fx:Script>
        <![CDATA[
            /**
             * Selected file chosen by user.
             */
            protected var sourceFile:File;


            /**
             * Function to choose a source file to be copied to
             * the application storage directory.
             */
            protected function saveButtonClickHandler(event:MouseEvent):void
            {
                var fileTypes:FileFilter = new FileFilter("Text File (*.txt)", "*.txt;");
                var allTypes:Array = new Array(fileTypes);

                // default selection to user's desktop
                sourceFile = File.desktopDirectory;

                // setup listeners
                sourceFile.addEventListener(Event.SELECT, fileSelectHandler);

                // browse for file
                try
                {
                    sourceFile.browse(allTypes);
                }
                catch (error:Error)
                {
                    trace("error selecting file to be copied.");
                }
            }

            /**
             * Called upon selection of file.
             */
            protected function fileSelectHandler(event:Event):void
            {
                try
                {
                    // selected source path
                    trace("Source path: " + sourceFile.nativePath);

                    // set destination path
                    var destinationFile:File = File.applicationStorageDirectory.resolvePath("files/" + sourceFile.name);
                    trace("Destination path: " + destinationFile.nativePath);

                    // check if destination file path already exists and copy
                    if (destinationFile.exists)
                        trace("source file already copied to application storage directory.");
                    else
                        sourceFile.copyTo(destinationFile);
                }
                catch (error:Error)
                {
                    trace("failed to copy source file to destination path.");
                }

                // remove listeners
                sourceFile.removeEventListener(Event.SELECT, fileSelectHandler);
            }
        ]]>
    </fx:Script>


    <s:Button label="Save As..."
              click="saveButtonClickHandler(event)"
              width="100%"
              height="100%" />


</s:WindowedApplication>
...