10

我正在寻找一种将字符串文本附加到 Windows 应用商店应用程序中的文件的方法。我已尝试读取该文件,然后创建一个新文件以覆盖它,但 Windows Store Apps C# 不像 C 那样工作,在创建具有相同名称的新文件时会覆盖旧文件。目前我的代码正在打开旧文件,读取它的内容,删除它并使用我读取的内容以及我希望附加的内容创建一个新文件。我知道有更好的方法,但我似乎找不到。那么如何将文本附加到 Windows 应用商店应用程序 (Windows RT) 中已存在的文件中?

编辑 -

我试过这个

var folder = Windows.ApplicationModel.Package.Current.InstalledLocation;
var file = await folder.GetFileAsync("feedlist.txt");
await Windows.Storage.FileIO.AppendTextAsync(file, s);

但是System.UnauthorizedAccessException 根据 MSDN,当文件是只读的(我检查了右键单击属性,它不是)并且如果我没有访问文件的必要权限时,会发生这种情况,我该怎么办?

4

2 回答 2

20

您可以使用FileIO类附加到文件。例如 ...

// Create a file in local storage
var folder = ApplicationData.Current.LocalFolder;
var file = await folder.CreateFileAsync("temp.txt", CreationCollisionOption.FailIfExists);

// Write some content to the file
await FileIO.WriteTextAsync(file, "some contents");

// Append additional content
await FileIO.AppendTextAsync(file, "some more text");

查看文件访问示例以获取更多示例。

于 2013-02-05T23:01:27.350 回答
1

使用 FileIO.AppendTextAsync 是一个不错的选择。请为此找到代码片段。

  • 首先它创建一个文件夹,如果不存在的话。否则不会创建。

  • 然后,如果不存在,它会创建一个文件。

  • 最后将文本附加到文件中。

    public static async void  WriteTrace(TraceEventType eventType, string msg, [CallerMemberName] string methodName = "")
    {
         const string TEXT_FILE_NAME = "Trace.txt";
        string logMessage = eventType.ToString() + "\t" + methodName + "\t" + msg ;
        IEnumerable<string> lines = new List<string>() { logMessage }; 
        StorageFolder localFolder = ApplicationData.Current.LocalFolder;
        StorageFolder tempFolder = ApplicationData.Current.TemporaryFolder;
    
        //if(localFolder.CreateFolderQuery(Windows.Storage.Search.CommonFolderQuery.)
        StorageFolder LogFolder = await localFolder.CreateFolderAsync("LogFiles", CreationCollisionOption.OpenIfExists);
    
        await LogFolder.CreateFileAsync(TEXT_FILE_NAME, CreationCollisionOption.OpenIfExists);
    
        StorageFile logFile = await LogFolder.GetFileAsync(TEXT_FILE_NAME);
    
        await FileIO.AppendLinesAsync(logFile, lines);
    
    }
    
于 2016-04-27T13:48:27.357 回答