2016-03-11 6 views
1

Я хотел бы написать текстовое содержимое в файл, который находится Assets папку, так что я получить доступ к файлу, но у меня нет доступа к написанию в нем, мой код:запись в файл из папки активов UWP

try { 
      //get the file 
      StorageFile storageFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///assets/test.txt")); 

      //try to write sring to it 
      await FileIO.WriteTextAsync(storageFile, "my string"); 

      } catch (Exception ex) { 
      Debug.WriteLine("error: " + ex); 

      } 

и я получаю ошибку:

Exception thrown: 'System.UnauthorizedAccessException' in mscorlib.ni.dll 
error: System.UnauthorizedAccessException: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.GetResult() 
    at MyProject.MainPage.<overWriteHtmlSrcFile>d__6.MoveNext() 

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

ответ

7

Файлы, расположенные в папке Assets, являются read only, поэтому вы получаете это исключение. Как вы уже упоминали в конце, есть способ создать файл в общедоступном месте, записать в нем то, что вам нужно, а затем просто перенести файл в папку с данными. Это будет выглядеть так:

try { 
      //create file in public folder 
      StorageFolder storageFolder = ApplicationData.Current.LocalFolder; 
      StorageFile sampleFile = await storageFolder.CreateFileAsync("test.txt", CreationCollisionOption.ReplaceExisting); 

      //write sring to created file 
      await FileIO.WriteTextAsync(sampleFile, htmlSrc); 

      //get asets folder 
      StorageFolder appInstalledFolder = Windows.ApplicationModel.Package.Current.InstalledLocation; 
      StorageFolder assetsFolder = await appInstalledFolder.GetFolderAsync("Assets"); 

      //move file from public folder to assets 
      await sampleFile.MoveAsync(assetsFolder, "new_file_name.txt", NameCollisionOption.ReplaceExisting); 

      } catch (Exception ex) { 
      Debug.WriteLine("error: " + ex); 

      } 
+0

Да, это работает отлично – Choletski

Смежные вопросы