如何检查文件是否是C#中的SQLite数据库?
打开非数据库文件时,SQLiteConnection.Open不会引发异常如何检查文件是否是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
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;
}