【发布时间】:2015-07-14 12:40:11
【问题描述】:
我的程序会遍历文件夹中的所有文件,读取它们,并且在不更改它们的信息的情况下将它们以不同的名称移动到另一个位置。但是我不能使用File.Move 方法,因为我得到了以下IOException:
进程无法访问该文件,因为它正被另一个进程使用 过程。
这就是我读取文件并将其所有行添加到 List<string> 的方式:
List<string> lines = null;
using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var sr = new StreamReader(fs, Encoding.Default))
{
lines = new List<string>();
while (!sr.EndOfStream)
lines.Add(sr.ReadLine());
}
这是我用来移动文件的函数:
public static bool ArchiveFile(string filePath, string archiveFolderLocation)
{
if (!Directory.Exists(archiveFolderLocation))
Directory.CreateDirectory(archiveFolderLocation);
try
{
string timestamp = string.Format("{0:yyyy-MM-dd HHmmss}", DateTime.Now);
string newFileName = Path.GetFileNameWithoutExtension(filePath) + " " + timestamp;
string destination = string.Format("{0}\\{1}{2}", archiveFolderLocation, newFileName, Path.GetExtension(filePath));
File.Move(filePath, destination);
return true;
}
catch (Exception ex)
{
return false;
}
}
我认为使用using 语句应该是垃圾收集并在使用后释放文件。如何释放文件以便移动它以及为什么我的文件保持锁定状态?
已解决:
知道了。在这两个调用之间的某个地方,我打开了一个 TextReaderobject 而不处置它。
【问题讨论】:
-
代码sn-ps是怎么链接的?扔到哪里去了?
-
@AmitKumarGhosh 上面的 sn-p 首先运行,然后是
ArchiveFile方法。异常发生在ArchiveFile方法的File.Move行中。 -
您确定该文件没有在其他地方使用吗?
using应该可以工作。但问题出在其他地方 -
您是否使用多线程来移动文件?并行任务还是等待任务?
-
@M.kazemAkhgary 明白了。在这两个调用之间的某个地方,我打开了一个
TextReader对象而不释放它。
标签: c# file io streamreader