检查文件是否是有效的 SQLite 数据库

2024-03-03

我需要检查文件(扩展名未知)是否是有效的 SQLite 数据库。

我的函数工作正常,但是当失败时,退出函数后文件仍然被锁定:

Public Function IsSqliteDB(ByVal uPath As String) As Boolean

    'Workaround for my problem: Make a copy and work on this because this function is going to lock the file unfortunately
    Dim sNewPath As String
    sNewPath = Settings.Locations.Folder_LocalAppData_Temp & "\temp_" & Replace(Now.ToString, ":", "_") & ".db"

    modIO.FileForceCopy(uPath, sNewPath)

    Dim bIsSQLiteDB As Boolean = False

    Dim c As New dhRichClient3.cConnection
    Dim r As dhRichClient3.cRecordset


    Try
        Dim b As Boolean = c.OpenDB(sNewPath) 'returns true although this is not an sqlite-db. Can't do anything about it
        R = c.OpenRecordset("SELECT * FROM sqlite_master")
        bIsSQLiteDB = True

    Catch ex As Exception
        r = Nothing
        c = Nothing
    Finally
        r = Nothing
        c = Nothing
    End Try

    modIO.DeleteFile(sNewPath)'this fails. File is locked

    Return bIsSQLiteDB

End Function

有人知道我可以在哪里确保文件不再被锁定吗?或者我真的必须使用该文件的副本吗,因为 COM 组件的行为并不真正已知(不幸的是闭源)? 我确实可以使用备份,但该文件可能非常大(> 1 GB),因此如果可以避免的话,我想避免制作副本来处理。

dhRichClient 中没有“关闭”功能。我猜,一旦 cConnection 超出范围,就会在内部调用“关闭”。在函数末尾调用 GC.Collect() 没有帮助。


要确定一个文件是否是 SQLite 数据库,只需检查该文件的前 16 个字节数据库头 http://www.sqlite.org/fileformat2.html#database_header.

来自 tmighty 的评论:

Public Function IsSqliteDB(ByVal uPath As String) As Boolean
    Dim bytes(16) As Byte
    Using fs As New IO.FileStream(uPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
        fs.Read(bytes, 0, 16)
    End Using
    Dim text As String = System.Text.ASCIIEncoding.ASCII.GetString(bytes)
    Return text.Contains("SQLite format")
End Function
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查文件是否是有效的 SQLite 数据库 的相关文章

  • DataTable:通过 LINQ 或 LAMBDA 进行动态 Group By 表达式

    我有一个数据表 我想在其中对未指定数量的字段进行分组 发生这种情况的原因是用户可以选择他想要分组的字段 所以 实际上 我将选择推入列表中 在这个选择上 我必须对我的数据表进行分组 想象一下这段代码 VB 或 C 都一样 public voi
  • 如何在 SQLite 中替换字符串?

    如何更新具有以下内容的表列 var mobile 233KKFSDK3234 Documents Page jpg 并将其替换为 Documents Page jpg 在 SQLite 中 注意 所有文字 除了 Documents 是动态的
  • 我是否需要安装 SQLite 才能使 SQLiteJDBC 正常工作?

    我想我只是没有 明白 如果我的计算机上尚未安装 SQLite 并且我想编写一个使用嵌入式数据库的 Java 应用程序 并且我将 SQLiteJDBC JAR 下载 导入到我的项目中 那么这就是我所需要的吗 或者 我是否需要先安装 SQLit
  • 如何解决 greenDAO 在执行 InsertOrReplace 时“不存在这样的表错误”?

    我正在使用 greenDAO 并且已成功生成所有必需的类和实体 并且我可以看到我的表已创建 但是在要替换的行上放置断点后 我收到一条错误消息 告诉我 不存在这样的表错误 try appTimeUsageDao insertOrReplace
  • 如何确保与 sqlite 和 NFS 的文件安全同步

    我最近将应用程序的工作区文件格式转换为 sqlite 为了确保 NFS 上的稳健操作 我使用了通用更新策略 对本地硬盘上临时位置中存储的副本进行了所有修改 仅在保存时 我才会通过使用临时文件复制原始文件来修改原始文件 可能在 NFS 上 我
  • 无法在 VB MVC 应用程序中创建 HtmlHelper 方法

    我无法弄清楚以下代码中缺少什么 我有一个应该添加 虚拟 辅助扩展的方法 Imports System Runtime CompilerServices Namespace HtmlHelpers Public Module HelpExte
  • 使用 sqlite 离线存储数据的 Web 表单应用程序

    我有一个 asp net Web 表单应用程序 它在远程服务器上使用 sql server 2005 所有控件均使用 linq to sql 绑定 我正在尝试提供完整的离线功能 所以我想知道是否可以像 sql server db 一样创建一
  • SQLite (Android):使用 ORDER BY 更新查询

    Android SQLite 我想要在 myTable 中的其他行之间插入行在android中使用SQLite 为此 我尝试增加从第 3 行开始的所有行的 id 这样 我就可以在位置 3 处插入新行 myTable 的主键是列 id 表中没
  • Flutter:将字符串转换为 Map

    我正在使用 SQFlite 在本地存储数据 我有一个表 其中有一个名为 json 的字段 该字段的类型为 TEXT 并存储转换为字符串的 json 例如 name Eduardo Age 23 性别男 到目前为止 一切正常 但随后我需要从数
  • SQLite 返回错误的 2013 年周数?

    我有一个简单的 SQL 来计算 SQLite 报告中的周数 SELECT STRFTIME W date column 2009 2012 年的数据是正确的 2013 年我总是得到错误的周数 例如 SELECT STRFTIME W 201
  • 导入已经创建的sqlite数据库(xamarin)

    我正在使用 Xamarin 想知道如何导入我已经创建的 sqlite 数据库 到目前为止 我已将其添加到资产文件夹中 但不知道下一步从哪里开始 string localPath Path Combine System Environment
  • 设置表单的背景颜色

    Private Sub HScrollBar1 Scroll ByVal sender As Object ByVal e As ScrollEventArgs Handles HScrollBar1 Scroll Me BackColor
  • 如何设置 Firefox 配置文件:Selenium RC、.Net 客户端驱动程序?

    我正在使用 Selenium RC Net 客户端驱动程序 我在 c selenium 目录中创建了一个 Firefox 配置文件 这是我的代码 Dim MySelenium As ISelenium Nothing MySelenium
  • 检查 DBNull 会引发 StrongTypingException

    我正在使用数据集从数据库中提取数据 一行中的一个字段是NULL 我知道这个 但是 以下 vb net 代码会抛出StrongTypingException 在数据集设计器中自动生成的 get SomeField 方法中 If Not IsD
  • 插入具有只读主键列的表

    我正在使用一个使用 sql server 数据库的应用程序 我试图在表中插入一行 如下所示 该表有一个主键 prodNum 这是自动生成的密钥 当我尝试向表中插入一行时 如下所示 在行中intResult oSglProdTableAdap
  • 变量替换为字符串

    我可以做类似的事情吗 s said s blah name blah 在 VB NET 中 写字越来越痛苦name said blah blah 在VB NET 14 对于VS2015 中 您可以使用字符串插值 https msdn mic
  • 接近语法错误(代码1)插入Android SQLite

    我正在创建一个通讯录应用程序 用户可以在其中输入姓名 电子邮件地址和号码 我希望将此数据保存在数据库中 但我似乎无法使插入方法起作用 我收到的错误是 android database sqlite SQLiteException near
  • Entity Framework 7 和 SQLite 表未创建

    我已经尝试了一段时间来弄清楚如何使用单个 DBContext 以 Code First 方式创建多个表 但没有任何运气 我确信这只是我对框架的不熟悉 但我不确定我错过了什么 这是一个包含实体和 DBContext 的简单示例 Table M
  • 如何防止在 ActiveX 方法调用期间重新进入 WPF 事件处理程序?

    我们从 WPF 和 STA 应用程序中调用 ActiveX 组件上的方法 此调用是通过以下方式后期绑定执行的 res ocx GetType InvokeMember methodName flags null ocx args 其中 oc
  • 如何在 sqlite 中将 2 列合并为新列

    我有一个包含 3 列的表 我必须将 2 列中的值按降序排列到一列中 A B C z 1 2 f 5 7 s 9 5 使用此示例 输出会将 B 列和 C 列中的值放入其中 如下所示 A B s 9 f 7 f 5 s 5 z 2 z 1 我当

随机推荐

  • 在 Debian Squeeze 上安装 mysql2 gem 时出错

    我在 Debian Squeeze 上安装 mysql2 gem 时遇到了这个 流行 错误 gem install mysql2 Building native extensions This could take a while ERRO
  • VB中如何获取当前可执行文件的完整路径?

    我使用 VB 创建了一个 Windows 应用程序 每当我执行exe 我想获取当前目录exe以编程方式归档 例如 现在 我正在执行exe文件输入d myApp test exe 每当我双击exe我想获取文件的路径exe文件如d myApp
  • 如何从 NSView 或 NSWindow 创建 AXUIElementRef?

    关于 macOS Accessibility API 是否可以创建对应于 NSView 或 NSWindow 的 AXUIElementRef 在 Carbon 时代 似乎有一种方法可以使用 AXUIElementCreateWithHIO
  • 所有虚函数都需要在派生类中实现吗?

    这似乎是一个简单的问题 但我在其他地方找不到答案 假设我有以下内容 class Abstract public virtual void foo 0 virtual void bar class Derived Abstract publi
  • 加载位图图像后,Jetpack compose (Glance) 小部件不会重新组合

    我正在尝试使用具有 SVG 图像支持的 Glance Jetpack 创建一个 Appwidget 我可以使用下载位图 ImageRequest Builder this data url decoderFactory SvgDecoder
  • 如何在django中的同一页面上拆分帖子视图

    我不知道这个问题是否有意义 但我对此感到很困惑 我有一个帖子列表视图 它正在此处呈现一些帖子 My question is how can I split the sections of the page something like th
  • 使用字母数字模式将 URL 编码为 QR 码?

    我需要为我的网址构建一个尽可能小的二维码 它足够短以使用缩短器 并且我不想依赖它们的可靠性 HTTP SUBDOM DOMAIN EU 8位字节模式太浪费地方了 我在那里可以到达版本2 但是版本1在字母数字模式 有没有办法将字母数字模式设置
  • 将现有 MATLAB 绘图绘制到另一个图形中

    我使用绘图命令绘制图形 然后使用设置命令更改其许多属性 我还存储了绘图的句柄 例如 h1 我需要的是稍后在我的代码中使用句柄再次绘制相同的图形 我检查了plot命令 没有找到任何接受句柄的版本 我还考虑获取 Xdata 和 Ydata 并使
  • 使用对话框完成 AJAX 调用后如何重新加载页面?

    因此 一旦用户单击打开的链接 我就会有一个带有表单的对话框用户界面 一旦他们单击 添加按钮 它就会创建一个 AJAX 调用 将数据提交到数据库中 我需要添加的是 reload 函数来刷新页面 如何添加重新加载功能 我尝试添加 windows
  • 当光标位于子组件上时,JPanel 不生成 MouseEvents

    这对我来说有点奇怪 但是当光标位于 JTextField 和 JToolBar 子组件上时 JPanel 不会生成 MouseEvents 但当光标位于 JLabel 上时 它会生成 MouseEvents 有人可以解释我为什么吗 有没有办
  • 如何将字符串从原生 iOS 插件返回到 unity?

    我正在创建一个 iOS 插件 它需要向 Unity 返回一个字符串 或 const char 我该如何实施 我想澄清一下之前的答案 C 声明 DllImport Internal private static extern string g
  • Grails 自动编译不在开发环境中

    我在一个名为 本地 的环境中运行 Grails 2 1 因为 开发 是为临时系统保留的 但我希望必须像在开发模式下一样自动编译 即如果我要更改控制器 则更改将被一次编译而无需重新运行 run app 参数 grails gsp enable
  • cordova 运行时出现 ios 错误..命令的错误代码 65:带有参数的 xcodebuild:

    This 仅发生错误当我尝试cordova run ios device 即使cordova build ios执行命令 没有报错 我做错了什么 以及如何在我的 iPhone 上调试 cordova 项目 需要这个 因为需要测试相机功能 W
  • pymysql,查询期间失去与MySQL服务器的连接

    查询期间与 MySQL 服务器的连接丢失 如何解决此问题 最好在我的程序中解决这个问题 import pymysql connection pymysql connect host user password db charset utf8
  • 获取 C++0x 随机数生成器状态的标准方法是什么?

    我正在尝试学习随机数生成器的新 C 0x 方法 26 5 并在符合 C 0x 的随机数引擎 26 5 1 4 上实现 该标准详细介绍了种子序列所需的接口 以及如何将它们传递给构造函数或seed发动机的功能 但是 我找不到任何标准接口来从引擎
  • 数据库复制还是镜像?

    SQL Server 2005 中的复制和镜像有什么区别 简而言之 镜像允许您让第二台服务器成为主服务器的 热 备用副本 随时准备在主服务器发生故障时接管 因此镜像提供了故障转移和可靠性 另一方面 复制允许两个或多个服务器保持 同步 这意味
  • iPhone App Objective C 中的 SimpleXML 解析方式

    我一直想知道是否有一种方法可以像在 PHP 中解析 SimpleXML 一样轻松地在 Objective C 中解析 XML 我所知道的唯一现有方法如下 使用 NSXMLParser 并创建委托来处理遇到 XML 元素 值等时触发的事件 使
  • liquibase“splitStatements”有什么好处?

    正在使用的 liquibase 版本 org liquibase liquibase core 3 8 2 不是专业版 Liquibase 文档 1 https docs liquibase com change types sql htm
  • iPhone 模拟器不显示启动画面

    要在基于视图的应用程序中显示启动屏幕 我所要做的就是将图像拖到资源文件夹中并将其命名为default png 对吗 这就是我所做的 但图像没有显示 添加它时 您是否告诉它复制到输出位置 这是添加后出现的对话框上的一个复选框 尝试阅读并确保选
  • 检查文件是否是有效的 SQLite 数据库

    我需要检查文件 扩展名未知 是否是有效的 SQLite 数据库 我的函数工作正常 但是当失败时 退出函数后文件仍然被锁定 Public Function IsSqliteDB ByVal uPath As String As Boolean