为什么我不能写入.txt文件?

时间:2015-09-22 12:23:15

标签: c# uwp

我想写一个txt文件,但是我得到了

  

拒绝访问路径

每一次。我尝试了谷歌搜索的许多建议。它们都不起作用:比如以管理员身份启动,提供对不同用户的完全访问权等等。

test.txt位于项目的根文件夹中:" MyProject / test.txt" ..

这是代码:

private void LikeIt()
{
    Task.Run(() =>
    {       
        using (System.IO.StreamWriter file =
        new System.IO.StreamWriter(File.OpenWrite("test.txt")))
        {
            foreach (var line in ReadFile())
            {
                // If the line doesn't contain the same ID, write the line to the file. 
                if (!line.Contains(App.Moviess.Filmerna[index].id.ToString()))
                {
                    file.WriteLine(App.Moviess.Filmerna[index].id.ToString() + "\r\n");
                }
            }
        }
    });
}

private List<string> ReadFile()
{
    List<string> lines = System.IO.File.ReadAllLines(@"C:\Users\Tomas\Desktop\MovieStarz\MovieStarz\WriteText.txt").ToList();
    return lines;
}

3 个答案:

答案 0 :(得分:3)

下面:

var sourceFile = "text.txt";
var targetFile = @"C:\Users\Tomas\Desktop\MovieStarz\MovieStarz\WriteText.txt";
var id = App.Moviess.Filmerna[index].id.ToString();

var lines = File.ReadAllLines(sourceFile)
    .Where(l => l.Contains(id))
    .ToArray();

File.AppendAllLines(targetFile, lines);

此代码打开文件,读取内容并关闭它。然后打开另一个文件,写下必要的内容并关闭它。

自动完成打开和关闭,您从未打开过两个文件。

如果这不起作用:

  • 您的文件可能被其他进程锁定。 (尝试重启PC)
  • 您的程序无权访问该文件(尝试将该文件从C:\ Users中删除)
  • 因为您是异步执行,所以必须保证两个线程不会同时访问该文件:

    private static readonly object fileLock = new object();
    private void LikeIt()
    {
        Task.Run(() =>
        {       
            lock(fileLock){
               //do the stuff here
            }
        });
    }
    

答案 1 :(得分:0)

也许某个其他程序已经打开了你想写的文件。所以你需要设置FileShare属性,

using (Stream fs = System.IO.File.Open("test.txt", 
                                      FileMode.OpenOrCreate, 
                                      FileAccess.Write, 
                                      FileShare.ReadWrite)) 
{
  using(var file = new System.IO.StreamWriter(fs))
  {
     ...
  }
}

答案 2 :(得分:-3)

您应该在using指令中打开文件。如果不这样做,您的文件将保持打开状态,并且在以下情况后无法访问:

using(var fs = File.OpenWrite("test.txt"))
using(var file = new System.IO.StreamWriter(fs))
{
    // your code here
}