gpt4 book ai didi

C# 文件处理 - 创建文件并打开

转载 作者:行者123 更新时间:2023-11-30 14:13:01 26 4
gpt4 key购买 nike

这是我创建和写入我的文件所做的:

    Create_Directory = @"" + path;
Create_Name = file_name;

private void Create_File(string Create_Directory, string Create_Name )
{
string pathString = Create_Directory;
if (!System.IO.Directory.Exists(pathString)) { System.IO.Directory.CreateDirectory(pathString); }

string fileName = Create_Name + ".txt";
pathString = System.IO.Path.Combine(pathString, fileName);
if (!System.IO.File.Exists(pathString)) { System.IO.File.Create(pathString); }

///ERROR BE HERE:
System.IO.StreamWriter file = new System.IO.StreamWriter(pathString);
file.WriteLine(Some_Method(MP.Mwidth, MP.Mheight, MP.Mtype, "" ));
file.Close();
}

这里的问题是我一整天都在努力解决的问题是在创建文件后写入文件。所以,我的程序很好地创建了一个文件,然后在写入之前给出了一个错误:

“mscorlib.dll 中出现类型为‘System.IO.IOException’的未处理异常”

“附加信息:该进程无法访问文件 'D:\Projects\Project 15\Project 15\world\world maps\A.txt',因为它正被另一个进程使用。”

不过有趣的是,当我再次运行该程序并尝试创建一个已经存在的文件时,如您所见,它跳过了文件创建,开始编写并且工作正常,我真的希望我的程序能够创建该文件无需重新运行即可写入...我在这里没有看到什么? :S

最佳答案

问题是 File.Create返回打开的 Stream,并且您永远不会关闭它。在您创建 StreamWriter 时,该文件正在(由您)“使用”。

也就是说,您不需要“创建”文件。 StreamWriter 会自动为您完成。只需删除这一行:

   if (!System.IO.File.Exists(pathString)) { System.IO.File.Create(pathString); }

一切都应该像写的那样工作。

请注意,我会稍微重写一下,以使其更安全:

private void Create_File(string directory, string filenameWithoutExtension )
{
// You can just call it - it won't matter if it exists
System.IO.Directory.CreateDirectory(directory);

string fileName = filenameWithoutExtension + ".txt";
string pathString = System.IO.Path.Combine(directory, fileName);

using(System.IO.StreamWriter file = new System.IO.StreamWriter(pathString))
{
file.WriteLine(Some_Method(MP.Mwidth, MP.Mheight, MP.Mtype, "" )); 
}
}

您也可以只使用 File.WriteAllText 或类似的方法来避免以这种方式创建文件。使用 using block 保证文件将被关闭,即使 Some_Method 引发异常。

关于C# 文件处理 - 创建文件并打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15489391/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com