如何检查文件是否是C#中的SQLite数据库?

如何检查文件是否是C#中的SQLite数据库?,c#,sqlite,C#,Sqlite,打开非数据库文件时,SQLiteConnection.Open不会引发异常 private void openDatabase() { sqlite = new SQLiteConnection("Data Source=" + this.filePath + ";Version=3;"); try { sqlite.Open(); } catch(SQLiteException e) { MessageBox.S

打开非数据库文件时,SQLiteConnection.Open不会引发异常

private void openDatabase()
{
    sqlite = new SQLiteConnection("Data Source=" + this.filePath + ";Version=3;");

    try
    {
        sqlite.Open();
    }
    catch(SQLiteException e)
    {
        MessageBox.Show(e.Message + e.StackTrace);
    }
}

如何确定文件是否为SQLite数据库?

读取前16个字节,然后检查字符串“SQLite格式”

VB.Net

    Dim bytes(16) As Byte
    Using fs As New IO.FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
        fs.Read(bytes, 0, 16)
    End Using
    Dim chkStr As String = System.Text.ASCIIEncoding.ASCII.GetString(bytes)
    Return chkStr.Contains("SQLite format")
更新2

#


读取前16个字节,然后检查字符串“SQLite格式”

VB.Net

    Dim bytes(16) As Byte
    Using fs As New IO.FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
        fs.Read(bytes, 0, 16)
    End Using
    Dim chkStr As String = System.Text.ASCIIEncoding.ASCII.GetString(bytes)
    Return chkStr.Contains("SQLite format")
更新2

#

publicstaticboolssqlitedatabase(字符串路径文件)
{
布尔结果=假;
if(File.Exists(pathToFile)){
使用(FileStream stream=newfilestream(pathToFile,FileMode.Open,FileAccess.Read,FileShare.ReadWrite))
{
字节[]头=新字节[16];
对于(int i=0;i<16;i++)
{
header[i]=(字节)stream.ReadByte();
}
结果=System.Text.Encoding.UTF8.GetString(header).Contains(“SQLite格式3”);
stream.Close();
}
}
返回结果;
}
公共静态bool ISSqlite数据库(字符串路径文件)
{
布尔结果=假;
if(File.Exists(pathToFile)){
使用(FileStream stream=newfilestream(pathToFile,FileMode.Open,FileAccess.Read,FileShare.ReadWrite))
{
字节[]头=新字节[16];
对于(int i=0;i<16;i++)
{
header[i]=(字节)stream.ReadByte();
}
结果=System.Text.Encoding.UTF8.GetString(header).Contains(“SQLite格式3”);
stream.Close();
}
}
返回结果;
}

@Ben您可以在上述代码中传递文件路径并检查返回的字符串,如果该字符串包含“SQLite格式”,则您的文件是SQLite数据库。请检查这是否对您有效。您为什么要创建一个包含17个字节的数组?@Ben这是因为在VB中,数组的大小是用数组的上限来声明的,而大多数语言(包括C#)都是如此通过指定数组中的元素数来声明数组的大小。@b您可以在上述代码中传递文件路径并检查返回的字符串,如果该字符串包含“SQLite格式”,则您的文件是SQLite数据库。请检查这是否适用。为什么要创建一个包含17个字节的数组?@Ben这是因为在VB中,数组的大小是用数组的上限来声明的,而大多数语言(包括C#)都是通过指定数组中的元素数来声明数组的大小。
    public static bool isSQLiteDatabase(string pathToFile)
    {
        bool result = false;

        if (File.Exists(pathToFile)) {

            using (FileStream stream = new FileStream(pathToFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
            {
                byte[] header = new byte[16];

                for (int i = 0; i < 16; i++)
                {
                    header[i] = (byte)stream.ReadByte();
                }

                result = System.Text.Encoding.UTF8.GetString(header).Contains("SQLite format 3");

                stream.Close();
            }

        }

        return result;
    }