System.Data.SQLite和奇怪的File.Copy错误

时间:2010-11-09 08:55:10

标签: c# .net sqlite system.data.sqlite

我发现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的交互。我希望文件副本失败并出现异常,但它只是默默地将整个文件排除在外。

1 个答案:

答案 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"));
}