Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > WPF, UWP, WinRT, XAML
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.07.2017, 17:10   #1
Mukudori
Пользователь
 
Регистрация: 05.07.2017
Сообщений: 24
По умолчанию [UWP] Доступ к операциям с папками

При попытке присвоить переменной типа StorageFolder адрес папки на другом диске выбивает с ошибкой "Не удается получить доступ к указанному файлу или папке"

Код:
StorageFolder newfolder = await StorageFolder.GetFolderFromPathAsync(ExportBox.Text);
похожая ошибка возникает если я пытаюсь создать папку в пределах корневого каталога приложения

Код:
private async void EndAndAccept(object sender, RoutedEventArgs e)
{
   StorageFolder folder = await Package.Current.InstalledLocation.GetFolderAsync(GlobalFuncs.GetLocalFolder());
   await folder.CreateFolderAsync(FolderBox.Text);
}
функция GetLocalFolder() возвращает строку полного пути до папки вложенную в корневой каталог.

Основная моя цель создавать папки с нужным именем внутри корневого каталога и экспортировать содержимое этих папок в любое указанное место на любом диске.
Mukudori вне форума Ответить с цитированием
Старый 12.07.2017, 19:31   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Цитата:
Сообщение от Mukudori Посмотреть сообщение
функция GetLocalFolder() возвращает строку полного пути до папки вложенную в корневой каталог.
должна возвращать путь внутри корневого каталога.
Если в корне с программой есть папка "Новая папка", то должно быть:
Код:
StorageFolder folder = await Package.Current.InstalledLocation.GetFolderAsync("Новая папка");
Если нужна вложенная дальше папка, то:
Код:
StorageFolder folder = await Package.Current.InstalledLocation.GetFolderAsync("Новая папка\\Вложенная папка");
pu4koff вне форума Ответить с цитированием
Старый 12.07.2017, 19:36   #3
Mukudori
Пользователь
 
Регистрация: 05.07.2017
Сообщений: 24
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
должна возвращать путь внутри корневого каталога.
Если в корне с программой есть папка "Новая папка", то должно быть:
Код:
StorageFolder folder = await Package.Current.InstalledLocation.GetFolderAsync("Новая папка");
Если нужна вложенная дальше папка, то:
Код:
StorageFolder folder = await Package.Current.InstalledLocation.GetFolderAsync("Новая папка\\Вложенная папка");
Полный путь тоже можно вставлять, это не имеет значения. Я уже работал с папкой таким образом и вызывал список файлов. Ошибка возникает в следующей строчке, когда я создаю папку.
Mukudori вне форума Ответить с цитированием
Старый 12.07.2017, 20:15   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Туплю. Package.Current.InstalledLocation только для чтения. Писать можно сюда: ApplicationData.Current.LocalFolder (это папка в профиле пользователя AppData\Local\)
или чего там у ApplicationData.Current больше для задачи подойдёт.
pu4koff вне форума Ответить с цитированием
Старый 13.07.2017, 17:24   #5
Mukudori
Пользователь
 
Регистрация: 05.07.2017
Сообщений: 24
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Туплю. Package.Current.InstalledLocation только для чтения. Писать можно сюда: ApplicationData.Current.LocalFolder (это папка в профиле пользователя AppData\Local\)
или чего там у ApplicationData.Current больше для задачи подойдёт.
А как это оформить?

вот так нельзя:

Код:
StorageFolder NewFolder = await ApplicationData.Current.LocalFolder(GlobalFuncs.GetLocalFolder(true));
И как поступить с копированием файлов в постороннюю папку, не относящуюся к корневому каталогу приложения?
Mukudori вне форума Ответить с цитированием
Старый 13.07.2017, 22:24   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Цитата:
Сообщение от Mukudori Посмотреть сообщение
А как это оформить?

вот так нельзя:

Код:
StorageFolder NewFolder = await ApplicationData.Current.LocalFolder(GlobalFuncs.GetLocalFolder(true));
Ну, как-то так можно создавать папки:
Код:
var f = await ApplicationData.Current.LocalFolder.CreateFolderAsync("folder");
await f.CreateFolderAsync("subfolder");
await f.CreateFolderAsync("subfolder\\subsubfolder");
Цитата:
И как поступить с копированием файлов в постороннюю папку, не относящуюся к корневому каталогу приложения?
Нужно чтобы пользователь выбрал папку, в которую будет копироваться что-то:
https://msdn.microsoft.com/ru-ru/lib...code-snippet-2
picker даст права программе на работу в выбранной папке. Права эти можно кэшировать через Windows.Storage.AccessCache.Storage ApplicationPermissions.FutureAccess List
чтобы на каждый чих не заставлять пользователя одну и ту же папку выбирать.
pu4koff вне форума Ответить с цитированием
Старый 14.07.2017, 11:56   #7
Mukudori
Пользователь
 
Регистрация: 05.07.2017
Сообщений: 24
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Ну, как-то так можно создавать папки:
Код:
var f = await ApplicationData.Current.LocalFolder.CreateFolderAsync("folder");
await f.CreateFolderAsync("subfolder");
await f.CreateFolderAsync("subfolder\\subsubfolder");
когда я пытаюсь сделать так:

Код:
var f = await ApplicationData.Current.LocalFolder.GetFolderAsync("Migrations\\ImageGalery");
                    await f.CreateFolderAsync("papka");
то операция проходит, но в папке с проектом я не нахожу ее

"Migrations\\ImageGalery" у меня находится в "Debug\\AppX\\"
Mukudori вне форума Ответить с цитированием
Старый 14.07.2017, 15:49   #8
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Она и не будет в папке с проектом. Она будет в папке Local программы. в AppData.
Посмотрите адрес ApplicationData.Current.LocalFolder , там и ищите папки свои.
в UWP своя замороченная схема работы с файлами. Типа всё безопасно и никому ничего нельзя. Каждая программа в своей "песочнице" и в чужие файлы не лезет.
pu4koff вне форума Ответить с цитированием
Старый 15.07.2017, 11:04   #9
Mukudori
Пользователь
 
Регистрация: 05.07.2017
Сообщений: 24
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Она и не будет в папке с проектом. Она будет в папке Local программы. в AppData.
Посмотрите адрес ApplicationData.Current.LocalFolder , там и ищите папки свои.
в UWP своя замороченная схема работы с файлами. Типа всё безопасно и никому ничего нельзя. Каждая программа в своей "песочнице" и в чужие файлы не лезет.
Да я уже понял на какой гемор себя обрек когда начал работать с этой платформой и что все действия мне нужно совершать спросив разрешения у "большого брата", который постоянно следит за мной и держит все под полным контролем. Но раз взялся, то дороги назад уже нет.

А где этот localFolder находится?
Mukudori вне форума Ответить с цитированием
Старый 15.07.2017, 11:35   #10
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Где-то тут:
C:\Users\<Имя пользователя>\AppData\Local\Package s\<идентификатор приложения>\LocalState
в зависимости от настроек системы путь может отличаться.
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[UWP] Пересоздание базы данных SQLite Mukudori WPF, UWP, WinRT, XAML 1 10.07.2017 11:39
Перевести C++ библиотеки в UWP C# Yury8888 WPF, UWP, WinRT, XAML 0 09.06.2017 17:39
UWP приложение можно запустить в виндувс 7? spruced Windows 3 05.03.2017 18:29
Прошу примеры Delphi asm по битовым операциям Turbine Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 21.09.2016 11:46
Нужен учитель. UWP. 102 WPF, UWP, WinRT, XAML 22 03.06.2016 09:22