我的程序浏览文件夹中的所有文件,读取它们,并且不更改其信息,将它们移动到另一个名称下的位置。但是我无法使用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
语句应该在使用后进行垃圾收集和释放。如何释放文件以便我可以移动它以及为什么我的文件保持锁定状态?
解决:
知道了。在这两个调用之间的某个地方,我打开了一个TextReader
对象而没有将其丢弃。
答案 0 :(得分:0)
我认为使用using语句应该是垃圾收集和 使用后释放文件。我怎样才能释放文件 移动它以及为什么我的文件保持锁定?
不是真的。使用语句只不过是:
try { var resource = new SomeResource(); }
finally { resource.Dispose(); // which is not GC.Collect(); }
它工作正常,因此看起来您的文件是从代码中的其他位置打开的......
P.S。 顺便说一下你可以这样做:
List<string> lines = File.ReadAllLines().ToList();
答案 1 :(得分:-2)
您可以使用:
string dpath = "D:\\Destination\\";
string spath = "D:\\Source";
string[] flist = Directory.GetFiles(spath);
foreach (string item in flist)
{
File.Move(item, dpath + new FileInfo(item).Name);
}
替换D:\\来源&amp; D:\\ Destination \\分别带有所需的源路径和目标路径。