我发现File.Copy很乐意将文件复制到自身而不会抛出异常。错误地,我将sqlite数据库文件复制到自身,该文件不再是有效的数据库。 我已经多次重复这个测试并获得相同的结果。使用winmerge(或文本编辑器)我看到结果文件有0个字节,但Windows资源管理器仍显示原始文件大小。 我错过了什么? (vs2008,win7-64)
编辑:一些代码。我知道很简单。并且它不是0字节,它都是nuls。
public bool RestoreDatabaseSqlite(string backupFilePath)
{
try
{
File.Copy(backupFilePath, _databaseFilePath, true);
}
catch(Exception ex)
{
MessageBox.Show("Error restoring database file: " + ex.Message, "Database Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
return true;
}
编辑#2:问题特定于System.Data.SQLite,文件上的开放SQLiteConnection以及与File.Copy的交互。我希望文件副本失败并出现异常,但它只是默默地将整个文件排除在外。
答案 0 :(得分:3)
快速测试:
File.Copy("foo.htm", "foo.htm");
抛出IOException
:
文件'foo.htm'已经存在。
尝试使用覆盖:
File.Copy("foo.htm", "foo.htm", true);
抛出IOException
:
该进程无法访问文件'foo.htm',因为它正由另一个进程使用。
所以一般来说它看起来都被覆盖了。你在做什么具体的?
我添加了一些额外的双重检查,它似乎仍然很好:
Console.WriteLine("Before:");
Console.Write(File.ReadAllText("foo.htm"));
Console.WriteLine();
Console.WriteLine("After:");
try
{
File.Copy("foo.htm", "foo.htm", true);
}
catch (IOException) {
Console.Write(File.ReadAllText("foo.htm"));
}