我正在尝试删除行尾的空格,然后该行将写入另一个文件中。
但是当程序到达FileWriter
时,它会给我以下错误
无法访问进程,因为它正由另一个进程使用。
守则如下。
private void FrmCounter_Load(object sender, EventArgs e)
{
string[] filePaths = Directory.GetFiles(@"D:\abc", "*.txt", SearchOption.AllDirectories);
string activeDir = @"D:\dest";
System.IO.StreamWriter fw;
string result;
foreach (string file in filePaths)
{
result = Path.GetFileName(file);
System.IO.StreamReader f = new StreamReader(file);
string newFileName = result;
// Combine the new file name with the path
string newPath = System.IO.Path.Combine(activeDir, newFileName);
File.Create(newPath);
fw = new StreamWriter(newPath);
int counter = 0;
int spaceAtEnd = 0;
string line;
// Read the file and display it line by line.
while ((line = f.ReadLine()) != null)
{
if (line.EndsWith(" "))
{
spaceAtEnd++;
line = line.Substring(0, line.Length - 1);
}
fw.WriteLine(line);
fw.Flush();
counter++;
}
MessageBox.Show("File Name : " + result);
MessageBox.Show("Total Space at end : " + spaceAtEnd.ToString());
f.Close();
fw.Close();
}
}
答案 0 :(得分:2)
File.Create
本身返回一个流。
使用该流写入文件。您收到此错误的原因是因为File.Create
返回的流已打开,您尝试再次打开该文件以进行写入。
关闭File.Create
返回的流,或者更好地使用该流进行文件写入或使用
Stream newFile = File.Create(newPath);
fw = new StreamWriter(newFile);
答案 1 :(得分:1)
即使您解决了初始问题,如果要将所有内容写入原始位置的新文件,也可以尝试将所有数据读入数组并关闭原始StreamReader
。性能注意事项:如果您的文件足够大,则此选项不会是最佳性能。
并且您不需要File.Create
,因为StreamWriter
将创建一个文件(如果它不存在),或者默认情况下覆盖它,或者如果您将append
参数指定为{ {1}}。
false
此外,您不会使用此方法从行尾删除多个空格。如果您需要这样做,请考虑将result = Path.GetFileName(file);
String[] f = File.ReadAllLines(file); // major change here...
// now f is an array containing all lines
// instead of a stream reader
using(var fw = new StreamWriter(result, false))
{
int counter = f.Length; // you aren't using counter anywhere, so I don't know if
// it is needed, but now you can just access the `Length`
// property of the array and get the length without a
// counter
int spaceAtEnd = 0;
// Read the file and display it line by line.
foreach (var item in f)
{
var line = item;
if (line.EndsWith(" "))
{
spaceAtEnd++;
line = line.Substring(0, line.Length - 1);
}
fw.WriteLine(line);
fw.Flush();
}
}
MessageBox.Show("File Name : " + result);
MessageBox.Show("Total Space at end : " + spaceAtEnd.ToString());
替换为line = line.Substring(0, line.Length - 1);
答案 2 :(得分:0)
在您尝试写入文件之前,您必须关闭正在阅读的所有文件。
答案 3 :(得分:0)
编辑:
Zafar是正确的,但是,这可能会让事情变得清晰。
因为File.Create返回一个流..该流已打开您的目标文件。这将使事情更清楚:
File.Create(newPath).Close();
使用上面的行,使其工作,但是,我建议正确地重写。这仅用于说明目的。
答案 4 :(得分:0)
在中使用语句编写流,如:
using (System.IO.StreamReader f = new StreamReader(file))
{
//your code goes here
}