我试图在C#(config)中获取文件的文本并将其放入字段中。代码本身可以工作,但我需要关闭文件流以在代码中打开一个新的文件流,但不知道在哪里放置Close()标记。有人能帮助我吗?
string documentspath = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
string rpath = documentspath + @"\Luminous\remember.ini";
if (File.Exists(rpath))
{
try
{
string text = File.ReadAllText(rpath);
string path = text.Split('|')[0];
string process = text.Split('|')[1];
string loadLib = text.Split('|')[2];
pathBox.Text = path;
processBox.Text = process;
if (loadLib == "True")
{
loadLibrary.Checked = true;
}
else
{
manualMap.Checked = true;
}
} catch
{
MessageBox.Show("Config file corrupted. Remembered data has been lost and deleted.");
File.Delete(rpath);
}
} else
{
MessageBox.Show("No config file loaded. Welcome, " + Environment.UserName + ".");
}
编辑:这是我打开另一个文件流的代码。
string documentspath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
if (!Directory.Exists(documentspath + @"\Luminous")) {
Directory.CreateDirectory(documentspath + @"\Luminous");
} else {
string rpath = documentspath + @"\Luminous\remember.ini";
if (!File.Exists(rpath)) {
File.Create(rpath);
File.WriteAllText(rpath, pathBox.Text + "|" + processBox.Text + "|" + loadlibcheck + "|" + manualmapcheck);
} else {
File.WriteAllText(rpath, string.Empty);
File.WriteAllText(rpath, pathBox.Text + "|" + processBox.Text + "|" + loadlibcheck + "|" + manualmapcheck);
}
}
答案 0 :(得分:8)
答案 1 :(得分:5)
由于以下行而出现错误:
File.Create(rpath);
尝试:
using(File.Create(rpath)) {}
File.Create
方法实际返回FileStream
,必须将其处理掉。有关它的一些信息可以在documentation上找到。
在“返回值”部分中:
类型:System.IO.FileStream提供读/写的FileStream 访问路径中指定的文件。
在“备注”部分:
此方法创建的FileStream对象的默认FileShare值为None;在原始文件句柄关闭之前,没有其他进程或代码可以访问创建的文件。
但是,正如Chris Dunaway提到的那样,根据documentation File.Create
的说明,根本不需要使用WriteAllText
:
创建新文件,将指定的字符串写入文件,然后关闭该文件。如果目标文件已存在,则会被覆盖。
答案 2 :(得分:3)
您有两个不错的选择:
finally
区块的try/catch
条款中。using
语句作为文件流。答案 3 :(得分:0)
你不必关闭任何东西。 File.ReadAllText
在内部读取和关闭流。因此,如果需要,您可以安全地调用另一个File.ReadAllText
。