为什么我不能写入 .txt 文件?
Why can't I write to the .txt file?
我想写入一个txt文件,但是我得到
access to the path is denied
每次。我尝试了 google 搜索中的许多建议。 None 其中有效:例如以管理员身份启动、向不同用户授予完全访问权限等。
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;
}
您应该在 using
指令中打开您的文件。如果不这样做,您的文件将保持打开状态,并且在以下时间后无法访问:
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))
{
...
}
}
这里:
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);
此代码打开文件、读取内容并关闭它。然后打开另一个文件,写入必要的内容并关闭它。
打开和关闭是自动完成的,您从未同时打开过两个文件。
如果这不起作用:
- 您的文件可能被另一个进程锁定。 (尝试重启电脑)
- 你的程序没有访问该文件的权限(尝试将文件从 C:\Users 中取出)
因为你是异步的,所以你必须保证两个线程不会同时访问文件:
private static readonly object fileLock = new object();
private void LikeIt()
{
Task.Run(() =>
{
lock(fileLock){
//do the stuff here
}
});
}
我想写入一个txt文件,但是我得到
access to the path is denied
每次。我尝试了 google 搜索中的许多建议。 None 其中有效:例如以管理员身份启动、向不同用户授予完全访问权限等。
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;
}
您应该在 using
指令中打开您的文件。如果不这样做,您的文件将保持打开状态,并且在以下时间后无法访问:
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))
{
...
}
}
这里:
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);
此代码打开文件、读取内容并关闭它。然后打开另一个文件,写入必要的内容并关闭它。
打开和关闭是自动完成的,您从未同时打开过两个文件。
如果这不起作用:
- 您的文件可能被另一个进程锁定。 (尝试重启电脑)
- 你的程序没有访问该文件的权限(尝试将文件从 C:\Users 中取出)
因为你是异步的,所以你必须保证两个线程不会同时访问文件:
private static readonly object fileLock = new object(); private void LikeIt() { Task.Run(() => { lock(fileLock){ //do the stuff here } }); }