FileStream 一直说文件忙,而根本没有被任何应用程序打开
FileStream keeps saying that the file is busy while it's not opened by any application at all
我正在尝试创建一个程序,用 C# 将某种数据写入文件。当我尝试 运行 代码时,控制台显示文件正忙,即使我根本没有打开它。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace databaseProject
{
public class Program
{
static void Main(string[] args)
{
Functions F = new Functions();
string studentID;
string studentName;
string subjectA;
string subjectB;
Console.WriteLine("Please enter the student's ID.");
studentID = Console.ReadLine();
Console.WriteLine("Please enter the student's name.");
studentName = Console.ReadLine();
Console.WriteLine("Please enter the student's score for subject A");
subjectA = Console.ReadLine();
Console.WriteLine("Please enter the student's score for subject B");
subjectB = Console.ReadLine();
Functions.saveFile(studentID, studentName, subjectA, subjectB);
}
}
public class Functions
{
public static void saveFile(string studentID, string studentName, string subjectA, string subjectB)
{
FileStream stream = new FileStream("DATA.txt", FileMode.Create, FileAccess.Write);
StreamWriter writer = new StreamWriter(stream);
Console.WriteLine(studentID);
Console.WriteLine(studentName);
Console.WriteLine(subjectA);
Console.WriteLine(subjectB);
File.AppendAllText("DATA.txt", studentID + Environment.NewLine);
File.AppendAllText("DATA.txt", studentName + Environment.NewLine);
File.AppendAllText("DATA.txt", subjectA + Environment.NewLine);
File.AppendAllText("DATA.txt", subjectB + Environment.NewLine);
writer.Close();
stream.Close();
}
}
}
控制台会改为这样写
Unhandled exception. System.IO.IOException: The process cannot access the file 'C:\Users\User\Documents\codes\C#\databaseProjectCSlash\databaseProjectCSlash\bin\Debug\net6.0\DATA.txt' because it is being used by another process.
at Microsoft.Win32.SafeHandles.SafeFileHandle.CreateFile(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options)
at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)
at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)
at System.IO.Strategies.FileStreamHelpers.ChooseStrategyCore(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)
at System.IO.Strategies.FileStreamHelpers.ChooseStrategy(FileStream fileStream, String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, Int64 preallocationSize)
at System.IO.StreamWriter.ValidateArgsAndOpenPath(String path, Boolean append, Encoding encoding, Int32 bufferSize)
at System.IO.File.AppendAllText(String path, String contents)
at databaseProject.Functions.saveFile(String studentID, String studentName, String subjectA, String subjectB) in C:\Users\User\Documents\codes\C#\databaseProjectCSlash\databaseProjectCSlash\Program.cs:line 52
at databaseProject.Program.Main(String[] args) in C:\Users\User\Documents\codes\C#\databaseProjectCSlash\databaseProjectCSlash\Program.cs:line 34
发送该消息后,文件中的所有数据都将被清除。
谢谢你的帮助,我真的很感激。
您的进程与自身冲突。
您在此处打开它(顺便说一下,使用 File.CreateText
会更简单)- 但从未真正使用您创建的编写器:
FileStream stream = new FileStream("DATA.txt", FileMode.Create, FileAccess.Write);
StreamWriter writer = new StreamWriter(stream);
...那么你 单独 试图在此处附加它,即使 stream
已经打开:
File.AppendAllText("DATA.txt", studentID + Environment.NewLine);
选择一种写入文件的方式,并坚持使用。就个人而言,我建议为您要编写的所有行创建一个 List<string>
或一个数组,然后只调用 File.WriteAllLines
一次,但您 可以 继续使用作者方法或 File.AppendAllText
方法...只是不要像这样在一起。
下面是您的 saveFile
方法的一个更简单的实现(重命名以遵循正常的命名约定):
public static void SaveFile(string studentId, string studentName, string subjectA, string subjectB)
{
var lines = new[] { studentId, studentName, subjectA, subjectB };
// (Write the lines to the console here if you want.)
File.WriteAllLines("DATA.txt", lines);
}
如果您想附加数据而不是重新创建文件,只需使用 File.AppendAllLines
即可。
我正在尝试创建一个程序,用 C# 将某种数据写入文件。当我尝试 运行 代码时,控制台显示文件正忙,即使我根本没有打开它。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace databaseProject
{
public class Program
{
static void Main(string[] args)
{
Functions F = new Functions();
string studentID;
string studentName;
string subjectA;
string subjectB;
Console.WriteLine("Please enter the student's ID.");
studentID = Console.ReadLine();
Console.WriteLine("Please enter the student's name.");
studentName = Console.ReadLine();
Console.WriteLine("Please enter the student's score for subject A");
subjectA = Console.ReadLine();
Console.WriteLine("Please enter the student's score for subject B");
subjectB = Console.ReadLine();
Functions.saveFile(studentID, studentName, subjectA, subjectB);
}
}
public class Functions
{
public static void saveFile(string studentID, string studentName, string subjectA, string subjectB)
{
FileStream stream = new FileStream("DATA.txt", FileMode.Create, FileAccess.Write);
StreamWriter writer = new StreamWriter(stream);
Console.WriteLine(studentID);
Console.WriteLine(studentName);
Console.WriteLine(subjectA);
Console.WriteLine(subjectB);
File.AppendAllText("DATA.txt", studentID + Environment.NewLine);
File.AppendAllText("DATA.txt", studentName + Environment.NewLine);
File.AppendAllText("DATA.txt", subjectA + Environment.NewLine);
File.AppendAllText("DATA.txt", subjectB + Environment.NewLine);
writer.Close();
stream.Close();
}
}
}
控制台会改为这样写
Unhandled exception. System.IO.IOException: The process cannot access the file 'C:\Users\User\Documents\codes\C#\databaseProjectCSlash\databaseProjectCSlash\bin\Debug\net6.0\DATA.txt' because it is being used by another process.
at Microsoft.Win32.SafeHandles.SafeFileHandle.CreateFile(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options)
at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)
at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)
at System.IO.Strategies.FileStreamHelpers.ChooseStrategyCore(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)
at System.IO.Strategies.FileStreamHelpers.ChooseStrategy(FileStream fileStream, String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, Int64 preallocationSize)
at System.IO.StreamWriter.ValidateArgsAndOpenPath(String path, Boolean append, Encoding encoding, Int32 bufferSize)
at System.IO.File.AppendAllText(String path, String contents)
at databaseProject.Functions.saveFile(String studentID, String studentName, String subjectA, String subjectB) in C:\Users\User\Documents\codes\C#\databaseProjectCSlash\databaseProjectCSlash\Program.cs:line 52
at databaseProject.Program.Main(String[] args) in C:\Users\User\Documents\codes\C#\databaseProjectCSlash\databaseProjectCSlash\Program.cs:line 34
发送该消息后,文件中的所有数据都将被清除。
谢谢你的帮助,我真的很感激。
您的进程与自身冲突。
您在此处打开它(顺便说一下,使用 File.CreateText
会更简单)- 但从未真正使用您创建的编写器:
FileStream stream = new FileStream("DATA.txt", FileMode.Create, FileAccess.Write);
StreamWriter writer = new StreamWriter(stream);
...那么你 单独 试图在此处附加它,即使 stream
已经打开:
File.AppendAllText("DATA.txt", studentID + Environment.NewLine);
选择一种写入文件的方式,并坚持使用。就个人而言,我建议为您要编写的所有行创建一个 List<string>
或一个数组,然后只调用 File.WriteAllLines
一次,但您 可以 继续使用作者方法或 File.AppendAllText
方法...只是不要像这样在一起。
下面是您的 saveFile
方法的一个更简单的实现(重命名以遵循正常的命名约定):
public static void SaveFile(string studentId, string studentName, string subjectA, string subjectB)
{
var lines = new[] { studentId, studentName, subjectA, subjectB };
// (Write the lines to the console here if you want.)
File.WriteAllLines("DATA.txt", lines);
}
如果您想附加数据而不是重新创建文件,只需使用 File.AppendAllLines
即可。