【问题标题】:Appending Text to File Windows store Apps (windows RT)将文本附加到文件 Windows 商店应用程序(Windows RT)
【发布时间】:2013-02-05 15:51:48
【问题描述】:

我正在寻找一种将字符串文本附加到 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,当文件是只读的(我检查了右键单击属性,它不是)并且如果我没有访问文件的必要权限时会发生这种情况 我该怎么办?

【问题讨论】:

    标签: c# windows-8 windows-runtime windows-store-apps


    【解决方案1】:

    您可以使用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");
    

    查看File Access Sample 了解更多示例。

    【讨论】:

    • 如果文件已经存在怎么办?你有FailIfExists,那会发生什么?该文件已存在于我的应用程序中(我将其用作启动输入文件)
    • @JohnDemetriou 有很多 CreationCollisionOption 可供选择。见msdn.microsoft.com/en-us/library/windows/apps/…
    • 我试过这个 var file = await folder.CreateFileAsync("feedlist.txt", CreationCollisionOption.OpenIfExists);等待 FileIO.AppendTextAsync(file, s);并且没有任何内容附加到文件
    • @JohnDemetriou 你有例外吗?文件在哪里?
    • 该文件位于app目录下(我也在解决方案中添加了它作为资源)。不起作用的是文件保持不变
    【解决方案2】:

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

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

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

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

      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);
      
      }
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多