C# 为什么可以';我不能写入.txt文件吗?

C# 为什么可以';我不能写入.txt文件吗?,c#,uwp,C#,Uwp,我想写一个txt文件,但我得到了 对路径的访问被拒绝 每一次。我试过谷歌搜索的很多建议。它们都不起作用:比如以管理员的身份开始,给不同的用户提供完全的访问权限,等等 test.txt位于项目的根文件夹中,例如:“MyProject/test.txt” 代码如下: private void LikeIt() { Task.Run(() => { using (System.IO.StreamWriter file = new Sy

我想写一个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;
}
private void LikeIt()
{
Task.Run(()=>
{       
使用(System.IO.StreamWriter)文件=
新的System.IO.StreamWriter(File.OpenWrite(“test.txt”))
{
foreach(ReadFile()中的var行)
{
//如果该行不包含相同的ID,请将该行写入文件。
如果(!line.Contains(App.Moviess.Filmerna[index].id.ToString())
{
file.WriteLine(App.Moviess.Filmerna[index].id.ToString()+“\r\n”);
}
}
}
});
}
私有列表读取文件()
{
列表行=System.IO.File.ReadAllLines(@“C:\Users\Tomas\Desktop\MovieStarz\MovieStarz\WriteText.txt”).ToList();
回流线;
}

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

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

可能您要编写的文件已被其他程序打开。所以您需要设置FileShare属性

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

这段代码打开文件,读取内容并关闭它。然后打开另一个文件,写入所需内容并关闭它

打开和关闭是自动完成的,您从未同时打开过两个文件

如果这不起作用:

  • 您的文件可能被其他进程锁定。(尝试重新启动电脑)
  • 您的程序没有访问该文件的权限(请尝试将该文件放在C:\Users之外)
  • 由于是异步执行的,因此必须保证两个线程不会同时访问该文件:

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

您是否以管理员身份登录到windows?随机向下投票lol-问题没问题。可能是某个讨厌windows的孩子:)关于问题:您是否查看了异常详细信息?从那里没有洞察?你是否尝试添加一些共享模式只是为了看看它是否会改变行为?我想说,由于缺乏细节,它被否决了。问题,代码。希望有人为他们调试代码。您应该在问题中添加异常详细信息,还应包括您已经尝试过的内容。我从问题文本中推测的
openWrite()
行。@Jeremythonpson:要读取的文件是另一个文件。FileShare.read可能足够了-如果另一个应用以独占方式锁定。。。没关系。我得到了“StreamWriter不能像一种方法一样使用”他忘了
new
我想-可能是过量的F编程,嗯?:)哦,为什么我没有看到:)一些关于为什么和更重要的是何时使用(IDisposable)的解释会很好。当然。也许还有一些来自非托管代码的示例?垃圾收集讲座也会很好。它会帮助人们理解为什么你建议使用,而不是每个人都有相同的知识…@Newbie1337:我的答案中有哪些部分帮助了你?restartPC,对源文件和目标文件使用var,以及锁。。在那之后,它起了作用……)苏,谢谢!
private static readonly object fileLock = new object();
private void LikeIt()
{
    Task.Run(() =>
    {       
        lock(fileLock){
           //do the stuff here
        }
    });
}