我有一个文件夹:
C:\测试
我正在尝试这段代码:
File.Move(@"c:\test\SomeFile.txt", @"c:\test\Test");
Run Code Online (Sandbox Code Playgroud)
我得到例外:
文件已存在
输出目录肯定存在,输入文件就在那里.
我不确定人们通常通过"锁定"文件意味着什么,但我想要的是对我将尝试用另一个文件打开它时会产生"指定文件正在使用"的文件执行该操作应用.
我想这样做来测试我的应用程序,看看当我尝试打开处于此状态的文件时它的行为.我试过这个:
FileStream fs = null;
private void lockToolStripMenuItem_Click(object sender, EventArgs e)
{
fs = new FileStream(@"C:\Users\Juan Luis\Desktop\corte.txt", FileMode.Open);
}
private void unlockToolStripMenuItem_Click(object sender, EventArgs e)
{
fs.Close();
}
Run Code Online (Sandbox Code Playgroud)
但显然它并没有达到我的预期,因为我能够在"锁定"时用记事本打开文件.那么如何锁定文件以便无法使用其他应用程序打开它以进行测试?
来自以下文件File.Move:
请注意,如果您尝试通过将同名文件移动到该目录来替换文件,则会出现IOException.您不能使用Move方法覆盖现有文件.
简而言之,你不能覆盖Move,所以为了方便覆盖Move,我通过做一个File.Copy后面的模仿行为File.Delete.就像是:
if (File.Exists(dstFileName))
{
// System.IO.File.Move cannot be used to overwrite existing files, so we're going
// to simulate that behavior with a Copy & Delete.
File.Copy(procContext.FileName, dstFileName);
File.Delete(procContext.FileName);
}
else
File.Move(procContext.FileName, dstFileName);
Run Code Online (Sandbox Code Playgroud)
我的问题是:是否有任何我需要防范的情况可能会导致源文件被删除而不首先被成功复制?
我从阅读文档中得到的理解是,因为File.Copy它不会返回任何在它不成功的情况下应该抛出异常的东西.有没有人遇到过任何不真实的情况?