locked
Средства работы с файлами на JavaScript RRS feed

  • Вопрос

  • Делаю приложение (пятнашки) на JS под Windows 8. Для реализации сохранений понадобилась возможность создавать/удалять файлы без участия пользователя. Так же необходимо определять количество файлов в папке. Прошу подсказать, как это сделать, так как я плохо знаю английский, и непереведённые материалы на сайте microsoft мне не помогут.
    • Перемещено Yubo. Zhang 14 сентября 2012 г. 8:46 (От:Приложения Windows в стиле Metro)
    8 июня 2012 г. 6:47

Ответы

  • Вот пример, как извлечь все файлы из папки картинок:

    // Получаем папку "Мои рисунки"
    var picturesLibrary = Windows.Storage.KnownFolders.picturesLibrary;
    //  Получаем содержимое папки
    picturesLibrary.getItemsAsync().then(function (items) {
        // Для примера показываем имена папок и количество элементов в них
        outputHeader(picturesLibrary.name, items.size);
        // Показываем информацию о дочерних элементах
        items.forEach(function (item) { 
            if (item.isOfType(Windows.Storage.StorageItemTypes.folder)) { 
                output(id(picturesLibrary.name), item.name + "\\"); 
            } 
            else { 
                output(id(picturesLibrary.name), item.fileName); 
            } 
        }); 
    });

    Вот так создается файл:

    Windows.Storage.KnownFolders.documentsLibrary.createFileAsync("sample.txt",
        Windows.Storage.CreationCollisionOption.replaceExisting).then(function (file) {
            sampleFile = file;
        });
    Для удаления, что то с ходу примера не нашел, видимо придется заменить createFileAsync, на deleteFileAsync...

    8 июня 2012 г. 7:13
    Отвечающий

Все ответы

  • Вот пример, как извлечь все файлы из папки картинок:

    // Получаем папку "Мои рисунки"
    var picturesLibrary = Windows.Storage.KnownFolders.picturesLibrary;
    //  Получаем содержимое папки
    picturesLibrary.getItemsAsync().then(function (items) {
        // Для примера показываем имена папок и количество элементов в них
        outputHeader(picturesLibrary.name, items.size);
        // Показываем информацию о дочерних элементах
        items.forEach(function (item) { 
            if (item.isOfType(Windows.Storage.StorageItemTypes.folder)) { 
                output(id(picturesLibrary.name), item.name + "\\"); 
            } 
            else { 
                output(id(picturesLibrary.name), item.fileName); 
            } 
        }); 
    });

    Вот так создается файл:

    Windows.Storage.KnownFolders.documentsLibrary.createFileAsync("sample.txt",
        Windows.Storage.CreationCollisionOption.replaceExisting).then(function (file) {
            sampleFile = file;
        });
    Для удаления, что то с ходу примера не нашел, видимо придется заменить createFileAsync, на deleteFileAsync...

    8 июня 2012 г. 7:13
    Отвечающий
  • Во-первых, что это за функции outputHeader и output. Во-вторых, что за странная конструкция id(picturesLibrary.name)? Но не важно, то, что мне надо, я понял. Только... Для чего нужен второй аргумент функции createFileAsync, и что он делает? 

    Ещё вопрос. Если мне надо использовать не системные папки, а, скажем, папку html в моём проекте, как её получить?


    8 июня 2012 г. 8:03
  • Второй параметр на тему, что делать если файл уже существует (в данном случае заменять).

    Доступ к папкам отличных от системных (ну кроме сменных носителей и расположенных в облаке) закрыт.

    8 июня 2012 г. 9:53
    Отвечающий
  • Ясно. И ещё вопрос, правда не по теме. Как передать значение некоторых переменных с одной страницы на другую (я перехожу между ними с помощью window.location.assign())? 
    8 июня 2012 г. 10:44
  • Э... Видите ли... Я не программирую на javaScript... Я взял примеры с MSDN и перевел для вас. Создайте новый вопрос, а то в этот топик уже заходить не будут, он ведь отвечен. И на новый топик из своего вопроса в этом топике поставьте ссылку. Как то так.

    8 июня 2012 г. 11:01
    Отвечающий
  • Ясно. Большое спасибо за переводы, без них ломал бы себе мозг гугл-переводами ещё пару дней.
    8 июня 2012 г. 11:37
  • Алексей вам правильно дал совет, если вопрос не связан с тем, что вы задали в самом начале, то лучше создать новый топик. А переменный видимо в сессии передавать нужно, как это делается в обычном веб-приложении, но у меня пока тоже опыта в приложениях в стиле Metro мало и возможно я ошибаюсь.

    Для связи [mail]

    9 июня 2012 г. 7:52
  • Насчёт вопроса, уже нашёл другое решение. Кстати, для людей, столкнувшихся с такой же проблемой, скажу, что для нужд приложения можно использовать папку Windows.Storage.ApplicationData.current.localFolder.
    9 июня 2012 г. 15:36