经验提醒:读写IO操作一定要加using(){}释放资源,否则会报 IO Exception:文件无法访问,正在由另一进程使用
一、FileStream流创建文件,用FileStream流实例化StreamReader紧接着读取
正常思路(错误的思路)我们会先创建文件,接着读取。如下代码:
//FileInfo先创建
FileInfo fi = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + filename + ".txt");
if(!fi.Exists)
{
fi.Create();
}
string lastline = "";
//StreamReader再读取
using (StreamReader sr = new StreamReader(AppDomain.CurrentDomain.BaseDirectory + filename + ".txt"))
{
while (sr.EndOfStream)
{
lastline = sr.ReadLine();
}
}
这样程序会报“xxxxx文件正由另一进程使用...无法读取”的错误。
猜测:使用FileInfo对象创建文件,背后是开启了一个线程创建,StreamReader读取文件也是开启了一个线程读取,由于FileInfo创建文件的对象流无法释放,StreamReader紧接着读取,就报错了。
解决方案如下:采用FileStream流创建文件,用FileStream流实例化一个StreamReader紧接着读取。Code如下:
string fpath = AppDomain.CurrentDomain.BaseDirectory + filename + ".txt";
if (!File.Exists(fpath))
{
FileStream fs = new FileStream(fpath, FileMode.OpenOrCreate, FileAccess.Read);//创建读取文件
sr = new StreamReader(fs);
logcontent = sr.ReadToEnd();
sr.Close();
fs.Close();
}
二、创建文件,及时写入
StreamWriter sw = File.CreateText(versionName);
sw.WriteLine("1.10.01");
sw.Close();