Search code examples
c#windows-phone-8.1filestream

Editing/Deleting lines in files in Windows Phone 8.1 C#


I'm accessing files in LocalFolder with structure:

1,Name1,SomeOtherProperty1
2,Name2,SomeOtherProperty2

using Streams to write and read specyfic lines:

        public async void saveToFile(List<string> content, string fileName) {

        using (StreamWriter writeStream = new StreamWriter(await localFolder.OpenStreamForWriteAsync(fileName, CreationCollisionOption.OpenIfExists))) {
            foreach (string contentLine in content) {
                await writeStream.WriteLineAsync(contentLine);
            }
            writeStream.Dispose();
        }
    }

But as far as I know there is no option to edit or delete only n line. Do you have any sugestions?


Solution

  • This one is dirty, but works for small files.

        public async void editLineById(string fileName, string match, string content) {
            List<string> file = await readAllFromFile(fileName);
            int matchId = file.IndexOf(file.Where((item) => item.Contains(match)).First());
            file[matchId] = content;
            overrideFile(fileName, file);
        }
    
        public async Task<List<string>> readAllFromFile(string fileName) {
                List<string> content = new List<string>();
                using (StreamReader readStream = new StreamReader(await localFolder.OpenStreamForReadAsync(fileName))) {
                    while (readStream.Peek() != -1) {
                        content.Add(await readStream.ReadLineAsync());
                    }
                    readStream.Dispose();
                }
            return content;
        }
    
        public async void overrideFile(string fileName, List<string> content) {
            using (StreamWriter writeStream = new StreamWriter(await localFolder.OpenStreamForWriteAsync(fileName, CreationCollisionOption.ReplaceExisting))) {
                foreach(string line in content) {
                    await writeStream.WriteLineAsync(line);
                }
            }
        }