c# 读取文件时总报另一个进行在用,急急。
StreamReader myReader = null;FileStream aFile = new FileStream(dataFilePath, FileMode.Open);
myReader = new StreamReader(aFile, Encoding.GetEncoding("GB2312"));
string strLine = "";
int iTmp = 0;
int j = 0;
while (strLine != null)
{
strLine = myReader.ReadLine();
while (iTmp > 0)
{
}
//列头不要
if (j == 0)
{
j++;
continue;
}
if (strLine != null && strLine.Length > 0)
{
al.Add(strLine.Split(','));
}
j++;
}
//
myReader.Close();
aFile.Close();
--------------------编程问答--------------------
--------------------编程问答--------------------
string path = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf('\\') + 1);
path += "test.txt";
//方法一:写文本文件.txt
StreamWriter writer = null;
if (File.Exists(path))
{
writer = File.AppendText(path);
}
else
{
writer = File.CreateText(path);
}
writer.WriteLine(DateTime.Now.ToString());
writer.Close();
失误,这是写文件…… --------------------编程问答-------------------- 上面两个回答什么意思呵,我是读取CSV的文件,一读有时候就说另一个进程被占用,我已经关闭了啊,高人指典. --------------------编程问答-------------------- FileStream aFile = new FileStream(dataFilePath, FileMode.Open);
myReader = new StreamReader(aFile, Encoding.GetEncoding("GB2312"));
两个数据流操作总有个顺序啊,一个没进行完你就开始读里面的文件流,很有可能出你这种错误的!
先执行完一个流在对读完的流操作! --------------------编程问答-------------------- 还有楼主你结贴率太低,别人不愿意回答你的! --------------------编程问答-------------------- 高人指典啊。 --------------------编程问答-------------------- using(FileStream aFile = new FileStream(dataFilePath, FileMode.Open))
{
...
aFile.close(); }
操作文件,再关闭close
--------------------编程问答-------------------- 上面老师,你看我写的代码怎么改好,非常感谢。 --------------------编程问答--------------------
StreamReader myReader = null;FileStream可不用吧,直接用文件名获取StreamReader。。 --------------------编程问答-------------------- 如果你使用了文件流操作, 那么你必须在使用完之后把这个流关闭,. 否则就会像楼主这样报错. --------------------编程问答-------------------- 我也关闭了啊,帮看一下。 --------------------编程问答--------------------
myReader = new StreamReader(dataFilePath, Encoding.GetEncoding("GB2312"));
string strLine = "";
// 下略。。
StreamReader myReader = null;试试这样可以不。。 --------------------编程问答-------------------- 恩
myReader = new StreamReader(dataFilePath, Encoding.GetEncoding("GB2312"));
string strLine = "";
// 下略。。
--------------------编程问答-------------------- 资源竞争啦,要用锁,防止同时一个读,一个写,我在你的代码上写了个类,你用这个类试试吧
--------------------编程问答-------------------- --------------------编程问答-------------------- 重新启动计算机症状会消失 --------------------编程问答-------------------- using(FileStream aFile = new FileStream(dataFilePath, FileMode.Open,FileShare.ReadWrite))
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Collections;
namespace HttpClientTester
{
public class ClassFileOperator
{
private static object syncobj = new object();
public static void WriteToFile(string dataFilePath,ArrayList al,bool needLock)
{
if (needLock)
{
lock (syncobj)
{
WriteToFileMethod(dataFilePath, al);
}
}
else
{
WriteToFileMethod(dataFilePath, al);
}
}
private static void WriteToFileMethod(string dataFilePath, ArrayList al)
{
StreamWriter writer = new StreamWriter(dataFilePath,false,Encoding.GetEncoding("GB2312"));
foreach (object item in al)
{
writer.Write(item.ToString());
writer.Write(",");
}
writer.Close();
}
public static ArrayList ReadFromFile(string dataFilePath, bool needLock)
{
if (needLock)
{
lock (syncobj)
{
return ReadFromFileMethod(dataFilePath);
}
}
else
{
return ReadFromFileMethod(dataFilePath);
}
}
private static ArrayList ReadFromFileMethod(string dataFilePath)
{
ArrayList al = new ArrayList();
StreamReader myReader = null;
FileStream aFile = new FileStream(dataFilePath, FileMode.Open);
myReader = new StreamReader(aFile, Encoding.GetEncoding("GB2312"));
string strLine = "";
int iTmp = 0;
int j = 0;
while (strLine != null)
{
strLine = myReader.ReadLine();
while (iTmp > 0)
{
}
//列头不要
if (j == 0)
{
j++;
continue;
}
if (strLine != null && strLine.Length > 0)
{
al.Add(strLine.Split(','));
}
j++;
}
//
myReader.Close();
aFile.Close();
return al;
}
}
}
{
} --------------------编程问答-------------------- 我上面的代码,可以解决并发的释放
但是我个人并不建议这么搞,多人并发我很难想象最终的文件会成啥样
所以个人建议14楼的lock方式去锁定文件,来避免并发 --------------------编程问答-------------------- 各位老师我的意思不是并发,就一个人操作,我那个也提示进程被使用
补充:.NET技术 , C#