2017-01-21 3 views
0

Я пытаюсь открыть файл и добавить строку в существующий контент с помощью следующего кода в UWPДобавить строку в файл содержимого

Public Async Sub AddDataToFile(sFileName As String, sStructData As String) 
    Dim storageFolder As StorageFolder = Windows.Storage.ApplicationData.Current.LocalFolder 
    Dim sampleFile As StorageFile = Await storageFolder.GetFileAsync(sFileName) 

    Dim text As String = Await Windows.Storage.FileIO.ReadTextAsync(sampleFile) 
    text += sStructData 
    Await Windows.Storage.FileIO.WriteTextAsync(sampleFile, text) 

End Sub 

К сожалению, я бросает исключение:

Исключение из type 'System.UnauthorizedAccessException' произошел в mscorlib.ni.dll, но не был обработан в коде пользователя.

по методу ReadTextAsync(). Почему так?

ответ

0
Windows.Storage.StorageFile fileToRead = 
        await storageFolder.GetFileAsync("File.txt"); 
        string text = await Windows.Storage.FileIO.ReadTextAsync(fileToRead); 

         await Windows.Storage.FileIO.WriteTextAsync(fileToRead, "text Goes HERE" + text); 

Я думаю, что это то, что вам нужно

+0

В чем разница с кодом OP? – Romasz

+0

Я только что написал свой рабочий код, так как ваш код работал отлично для меня на моем VS. Просто имейте в виду ... Каждый раз, когда вы пишете файл, предыдущий текст в файле стирается, хотя вначале файл имеет что-то в нем, но если вы пишете пустой текст, еще раз записывая файл, чтение его ничего не вернет. –

0

Я испытал фрагмент кода на моей стороне, и она работала хорошо. Нет ничего плохого в вашем методе AddDataToFile. Поэтому возможная причина может быть чем-то неправильным с файлом, который вы вызывали для чтения. Так как вы можете GetFileAsync успешно, так что файл может существовать фактически. Тогда вы получили System.UnauthorizedAccessException в ReadTextAsync(), это может быть связано с тем, что у вас нет прав доступа к этому файлу, возможно, этот файл создается другими пользователями, к которым у вас нет доступа, или, возможно, к файлу обращается другой процесс для записи.

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

Private Async Sub btnreadandwrite_Click(sender As Object, e As RoutedEventArgs) 
    Dim storageFolder As StorageFolder = Windows.Storage.ApplicationData.Current.LocalFolder 
    Dim sampleFile As StorageFile = Await storageFolder.CreateFileAsync("sampleFile.txt", CreationCollisionOption.ReplaceExisting) 
    Await FileIO.WriteTextAsync(sampleFile, "inital text") 
    AddDataToFile("sampleFile.txt", "add new content") 
End Sub 

Public Async Sub AddDataToFile(sFileName As String, sStructData As String) 
    Dim storageFolder As StorageFolder = Windows.Storage.ApplicationData.Current.LocalFolder 
    Dim sampleFile As StorageFile = Await storageFolder.GetFileAsync(sFileName) 
    Dim text As String = Await Windows.Storage.FileIO.ReadTextAsync(sampleFile) 
    text += sStructData 
    Await Windows.Storage.FileIO.WriteTextAsync(sampleFile, text) 
End Sub 
Смежные вопросы