簡體   English   中英

如何檢查文件是否為C#中的SQLite數據庫?

[英]How do I check if a file is a SQLite Database in C#?

當打開非數據庫文件時,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 Format”

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

C#

    byte[] bytes = new byte[17];
    using (IO.FileStream fs = new IO.FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) {
    fs.Read(bytes, 0, 16);
    }
    string chkStr = System.Text.ASCIIEncoding.ASCII.GetString(bytes);
    return chkStr.Contains("SQLite format");
    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;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM