Appending Text to File Windows store Apps (windows

2019-01-26 07:37发布

问题:

I am looking for a way to append strings-text to a file in a Windows Store App. I have tried reading the file and then creating a new one to overwrite it but Windows Store Apps C# does not work like C where when creating a new file with the same name overwrites the old one. Currently my code is opening the old file, reading it's contents, deleting it and creating a new one with the content I read plus the content I wish to append. I know there is a better way but I cannot seem to find it. So How may I append text to an already existent file in a Windows Store App (Windows RT)?

EDIT--

I tried this

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

but I keep getting System.UnauthorizedAccessException according to MSDN this happens when the file is readonly (I checked with right click properties, it's not) and if I do not have the necessary privileges to access the file what should I do?

回答1:

You can use the FileIO class to append to a file. For example ...

// 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");

Check out the File Access Sample for more examples.



回答2:

Using FileIO.AppendTextAsync is a good option. Please find the code snippet for this.

  • First it creates a folder, if not exists. Otherwise it will not create.

  • Then it creates a file if not exists.

  • Finally appending the text in the file.

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