天道酬勤,学无止境

我如何读取| DataDirectory |的当前路径。 从配置设置(How do I read the current path of |DataDirectory| from config settings)

问题

我正在编写一个程序,要求用户在应用程序启动时选择活动数据库。 我有一个Windows窗体,该窗体将列出存储在ApplicationData子文件夹中的数据库,该子文件夹专门用于存储数据库文件。 但是,当我创建一个新数据库时,我需要复制模板数据库,但是无法确定默认情况下该数据库的存储位置。

我试过了:

dpath = ConfigurationManager.AppSettings["DataDirectory"];

我似乎总是得到一个空值作为回报。 有一次我放弃了,以为我可以将DataDirectory设置为我选择的文件夹,但是看来我在执行程序时太晚了,无法使其生效。

newdpath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\MyAppFolder";

对于如何找到数据库的位置,或者我自己尽早设置数据库以影响程序操作的任何建议,我将不胜感激。

编辑:

对于第二部分,我发现我已经在执行TableAdapter.Fill命令之后试图修改连接字符串,从而解释了为什么要打开默认数据库。 这个谜已经解决了。 但是,第一部分仍然是一个未知数。

谢谢你。

回答1

|DataDirectory| 不是来自配置设置; 您混淆了三种不同的东西:

ConfigurationManager.AppSettings["DataDirectory"]

这来自配置设置。 您必须创建一个.config文件并将其放入您的项目中。 此特定设置是AppSettings元素中具有键"DataDirectory"的元素的值。 除非您将一个放在.config文件中,否则这个不存在。 通常,这是您放置永不更改的配置或启动数据的地方。 您不应在此处放置文件路径,因为文件路径在用户将数据库安装到的计算机上可能会有所不同。

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

这是安装您的应用程序的操作系统所定义的当前用户的漫游应用程序数据文件夹的路径。 您不能更改它,它是由OS定义的。 您可以确定此文件夹是用户可写的,如果用户卸载您的应用程序,则不会删除该文件夹,如果用户从另一台计算机漫游或登录,则该文件夹将可用。 通常,这是您要放置可编辑的应用程序数据的位置。

SqlConnection("Data Source=|DataDirectory|DatabaseFileName.sdf;...")

这是ADO.NET连接的连接字符串。 ADO.NET特别对待竖线,它会查找与竖线之间的键名匹配的AppDomain数据。 您可以通过以下方式获得相同的数据:

AppDomain.CurrentDomain.GetData("DataDirectory")

那么,什么写出DataDirectory的值呢? 这可以通过部署可执行文件的任何方式完成:

  • .MSI安装程序将其定义为应用程序的目标文件夹。
  • ClickOnce在项目中定义一个特殊的数据文件夹。
  • Web应用程序使用App_Data文件夹。
  • Visual Studio调试器使用debug文件夹。

请注意,.MSI安装程序可以允许用户更改DataDirectory。 这就是为什么永远不要硬编码或更改DataDirectory ,否则将无法找到应用程序数据的部署位置。 通常,您将DataDirectory文件夹用于与可执行文件一起部署的只读二进制数据。

如果需要写入与可执行文件一起部署的数据,则应首先将其复制到您知道用户将能够写入的位置(例如Environment.SpecialFolder.ApplicationData ,然后再写入副本。 DataDirectory不仅不一定是用户可写的,它还是部署的一部分,而不是用户数据的一部分; 如果您修复或卸载可执行文件,则将重新安装或删除DataDirectory 。 用户在删除数据时不喜欢它,因此请不要将其保存到DataDirectory

回答2

在使用ConnectionString,TableAdapter等之前,创建此行,以创建所谓的DataDirectory

我刚刚通过将它放在TableAdapter.Fill(DataSet.DataTable);之前成功地进行了测试。

AppDomain.CurrentDomain.SetData("DataDirectory", @"Full path to your data folder");

我找不到DataDirectory的位置和位置,因为它不存在,因此MSSQL将改为使用AppDomain.CurrentDomain的BaseDirectory

回答3

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)代码每次都会在开发中返回空值。 | DataDirectory | 在安装程序时设置。

生成项目,然后安装并测试。

我使用该行代码在运行时将数据库压缩到已安装的应用程序中。

可以将代码设置为变量,如下所示:昏暗的啤酒一样强大

Beer = Environmenr.GetFolderPath(Environment.SpecialFolder.ApplicationData)

这将返回INSTALLED | DataDirectory |的文件夹路径。 使用CStr和另一个变量添加数据库名称。

Dim MyPathA As String = CStr(Beer & "\Workout.mdb")
Dim MyPathB As String = CStr(Beer & "\BackupWorkout.mdb")

Dim JRO As JRO.JetEngine
JRO.CompactDatabase(CStr("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & MyPathA), _
CStr("Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & MyPathB & ":Jet OLEDB:Engine Type=5"))

On error Errorhandler, 
Errothandler
Kill(MyPathB)

第一行是您的数据库,第二行将其重命名为Backup并将其压缩在同一目录中。 如果那里有备份,它将触发错误,这将删除备份。

之后,说这是按钮单击。 再次运行。 在杀人线之后,

Me.Buttonx.PerformClick()

这就是在已安装的ClickOnce应用程序中压缩数据库的方法。 使用| DataDirectory | 在代码中将抛出非法字符错误...

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何使用从.csv文件读取的数据多次运行测试(数据驱动)(How to run a test many times with data read from .csv file (data driving))
    问题 我正在尝试自动化其中一个Web应用程序的测试,我需要知道如何使我的Codeed UI项目从CSV文件读取数据。 可以说我要测试登录屏幕。 我的CSV文件将包含一些用户名和密码。 我希望我的编码UI测试读取这些登录详细信息,并遍历它们以对每组数据运行测试。 回答1 Web上有许多有关数据驱动编码UI测试的教程。 使用CSV文件进行数据驱动的基本步骤如下。 创建CSV文件。 将CSV文件添加到项目中。 确保已部署CSV文件。 将CSV文件添加为单个测试的数据源。 阅读CSV字段并在测试中使用它们。 下文将详细说明具有某些变体的步骤。 Visual Studio 2010具有执行以下步骤的“数据源向导”。 Visual Studio 2012和2013版本没有向导,因此所有步骤都必须手动完成。 创建CSV文件 一种方法是在电子表格中创建文件,然后将其另存为逗号分隔值。 另一种方法是使用文本编辑器并只写文件。 我使用电子表格程序处理大数据源文件,并使用文本编辑器创建小文件。 一些编辑器在文件的开头添加了字节顺序标记(BOM),它将被添加到CSV的第一个字段名称中,该名称似乎使该字段不可读。 有关此BOM的更多信息,请参见此页面。 将CSV文件添加到项目中 使用解决方案资源管理器中的上下文菜单,选择添加->现有项目。 然后浏览到所需的文件。 注意,文件过滤器可能需要更改为*.*或*
  • ADO.NET | DataDirectory | 这在哪里记录?(ADO.NET |DataDirectory| where is this documented?)
    问题 在AppConfig中,可以使用|DataDirectory| 但我找不到任何文档? 回答1 |DataDirectory| 是替换字符串,因此您可以单独配置数据库文件的位置。 因此,而不是: SqlConnection c = new SqlConnection ( @"Data Source=.\SQLDB; AttachDbFilename=C:\MyDB\Database.mdf;Initial Catalog=Master"); 您可以执行以下操作: // Set |DataDirectory| value AppDomain.CurrentDomain.SetData("DataDirectory", "C:\myDB"); // SQL Connection String with |DataDirectory| substitution string SqlConnection c = new SqlConnection ( @"Data Source=.\SQLDB; AttachDbFilename=|DataDirectory|\Database.mdf;Initial Catalog=Master"); 回答2 在MSDN社交论坛中,可以找到此答案 | DataDirectory | (用管道符号括起来)是一个替换字符串,它指示数据库的路径。
  • SQL Express连接字符串:相对于应用程序位置的mdf文件位置(SQL Express connection string: mdf file location relative to application location)
    问题 我将SQL Express数据库用作c#中的单元测试项目的一部分。 我的数据库位于这里: ./Databases/MyUnitTestDB.mdf 我想在app.config使用相对路径或变量,而不是将我的连接字符串定义为: AttachDbFilename=C:\blah\blah\blah\yea\yea\yea\MyApplication\Databases\MyUnitTestDB.mdf 我已经看过|DataDirectory|的用法但是我认为这仅适用于Web应用程序正确吗? 我想在应用程序配置文件中对此进行控制,因为在生产中,应用程序使用托管的sql数据库。 回答1 谢谢大家,我结合了您的回答。 在我的app.config文件中,我的连接字符串定义如下 <add name="MyConnectionString" connectionString="Server=.\SQLExpress;AttachDbFilename=|DataDirectory|\MyDatabase.mdf;Database=MyDatabaseForTesting;Trusted_Connection=Yes;" /> 在我的单元测试类中,我使用以下命令设置DataDirectory属性 [TestInitialize] public void TestInitialize() {
  • 如何设置SQL Server连接字符串?(How can I set an SQL Server connection string?)
    问题 我正在开发一个简单的C#应用​​程序,我想知道这一点:当我将应用程序连接到PC上的SQL Server时,我知道连接字符串(服务器名称,密码等),但是当我连接它时到另一台PC,SQL Server连接字符串是不同的。 SQL Server中是否有一个可以连接的默认帐户附带的普通帐户? 我听说过SQL Server中的sa帐户。 什么是sa ? 回答1 .NET DataProvider-使用用户名和密码的标准连接 using System.Data.SqlClient; SqlConnection conn = new SqlConnection(); conn.ConnectionString = "Data Source=ServerName;" + "Initial Catalog=DataBaseName;" + "User id=UserName;" + "Password=Secret;"; conn.Open(); .NET DataProvider-可信连接 SqlConnection conn = new SqlConnection(); conn.ConnectionString = "Data Source=ServerName;" + "Initial Catalog=DataBaseName;" + "Integrated Security=SSPI
  • | DataDirectory在哪里? 定义的?(Where is |DataDirectory| defined?)
    问题 这是该文件在系统上的哪个位置的后续问题? 遍及SO和互联网的大量问题和答案,但是我找不到任何能回答这个特定问题的答案。 全部为默认设置,但我找不到文件本身, 不存在。 在哪里/如何获得| DataDirectory | 定义了? 文件保存在哪里,甚至存在? 如果没有,那是怎么回事? 编辑:该文件不在AppDomain.CurrentDomain.GetData("DataDirectory").ToString(); 所有(分散的)答案都告诉我应该的。 它必须在某个地方,因为当我更改模型时,调试器中断了关于模型的烦恼,使表不等于表。 不在那里 回答1 |DataDirectory| 本身不是文件。 引用了相当老的MSDN文章: 默认情况下, | DataDirectory | 变量将扩展如下: 对于放置在用户计算机目录中的应用程序,这将是该应用程序的(.exe)文件夹。 对于在ClickOnce下运行的应用,这将是ClickOnce创建的特殊数据文件夹对于Web应用程序,这将是App_Data文件夹在后台, | DataDirectory |的值仅来自应用程序域上的属性。 通过执行以下操作可以更改该值并覆盖默认行为: AppDomain.CurrentDomain.SetData("DataDirectory", newpath) 关于架构不一致的进一步报价:
  • 如何从Java jar文件读取资源文件?(How do I read a resource file from a Java jar file?)
    问题 我正在尝试从作为桌面应用程序运行的单独jar中访问jar文件中的XML文件。 我可以获取所需文件的URL,但是当我将该URL传递给FileReader(作为字符串)时,我得到了FileNotFoundException,上面写着“文件名,目录名或卷标语法不正确。” 作为参考,我毫不费力地从同一个jar中读取图像资源,并将URL传递给ImageIcon构造函数。 这似乎表明我用来获取URL的方法是正确的。 URL url = getClass().getResource("/xxx/xxx/xxx/services.xml"); ServicesLoader jsl = new ServicesLoader( url.toString() ); 在ServicesLoader类中,我有 XMLReader xr = XMLReaderFactory.createXMLReader(); xr.setContentHandler( this ); xr.setErrorHandler( this ); xr.parse( new InputSource( new FileReader( filename ))); 使用这种技术读取XML文件有什么问题? 回答1 看起来您想使用java.lang.Class.getResourceAsStream(String) ,请参见
  • 如何逐行读取和打印文本文件的内容?(How to read and print contents of text file line by line?)
    问题 因此,我不知道如何一次从一个* .txt文本文件中获取CMD回显行,并且要稍加延迟才能使其看起来像正在处理。 仅凭一批就可以做到吗? 我曾尝试进行研究,但找不到足够的文本操作来做到这一点,但我确实知道如何在每个命令之间进行暂停以及如何执行循环。 回答1 让我们假设文本文件TestFile.txt应该逐行输出,这是ANSI编码的文本文件,仅包含此文本的ASCII字符: Line 1 is with nothing special. Next line 2 is an empty line. ;Line 3 with a semicolon at beginning. Line 4 has leading spaces. Line 5 has a leading horizontal tab. Line 6 is with nothing special. Next line 7 has just a tab and four spaces if used internet browser does not remove them. Line 8 is ! with exclamation marks ! in line! ? Line 9 starts with a question mark. : Line 10 starts with a colon. ] Line 11
  • 在基于servlet的应用程序中的何处放置以及如何读取配置资源文件?(Where to place and how to read configuration resource files in servlet based application?)
    问题 在我的Web应用程序中,我必须向诸如finance@xyz.com之类的预定义用户组发送电子邮件,因此我希望将其添加到.properties文件中,并在需要时进行访问。 这是正确的过程吗?如果是这样,那我应该把这个文件放在哪里? 我正在使用Netbeans IDE,它具有用于源文件和JSP文件的两个单独的文件夹。 回答1 这是你的选择。 Java Web应用程序归档文件(WAR)中基本上有三种方式: 1.将其放在类路径中 这样就可以通过ClassLoader#getResourceAsStream()使用相对于类路径的路径来加载它: ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); InputStream input = classLoader.getResourceAsStream("foo.properties"); // ... Properties properties = new Properties(); properties.load(input); 此处foo.properties应该放置在/WEB-INF/lib应用程序的默认类路径所覆盖的根目录之一中,例如Webapp的/WEB-INF/lib和/WEB-INF/classes ,服务器的/lib或JDK /
  • 如何在C#中获取和设置环境变量?(How do I get and set Environment variables in C#?)
    问题 如何获取环境变量,如果缺少某些内容,请设置该值? 回答1 使用System.Environment类。 方法 var value = System.Environment.GetEnvironmentVariable(variable [, Target]) 和 System.Environment.SetEnvironmentVariable(variable, value [, Target]) 将为您完成这项工作。 可选参数Target是EnvironmentVariableTarget类型的枚举,并且可以是以下之一: Machine , Process或User 。 如果您省略它,则默认目标是当前进程。 回答2 我在使用.NET控制台应用程序读取PATH环境变量时遇到了这个问题,发现使用System.Environment.GetEnvironmentVariable会自动扩展环境变量。 我不希望这种情况发生……这意味着路径中的文件夹(如“%SystemRoot%\ system32”)被重写为“ C:\ Windows \ system32”。 为了获得未展开的路径,我必须使用以下命令: string keyName = @"SYSTEM\CurrentControlSet\Control\Session Manager\Environment\"; string
  • 如何从Java项目中的相对路径读取文件? java.io.File找不到指定的路径(How to read file from relative path in Java project? java.io.File cannot find the path specified)
    问题 我有一个包含2个软件包的项目: tkorg.idrs.core.searchengines tkorg.idrs.core.searchengines 在程序包(2)中,我有一个文本文件ListStopWords.txt ;在程序包(1)中,我有一个FileLoadder类。 这是FileLoader代码: File file = new File("properties\\files\\ListStopWords.txt"); 但是有这个错误: The system cannot find the path specified 您能给出解决方案吗? 谢谢。 回答1 如果它已经在类路径中,则只需从类路径而不是磁盘文件系统中获取它即可。 不要在java.io.File摆弄相对路径。 它们取决于当前的工作目录,您完全无法从Java代码内部对其进行控制。 假设ListStopWords.txt与FileLoader类位于同一程序包中,然后执行以下操作: URL url = getClass().getResource("ListStopWords.txt"); File file = new File(url.getPath()); 或者,如果您最终想要得到的只是它的InputStream : InputStream input = getClass()
  • Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine(Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine)
    问题 我在32位Windows 2008服务器中创建了一个用.NET 3.5开发的Windows应用程序。 在64位服务器中部署应用程序时,它显示错误“ Microsoft.Jet.OLEDB.4.0'提供程序未在本地计算机上注册”。 因此,作为解决此问题的方法,我将项目的build属性更改为X86,以便它将以32位模式进行构建,并在32位计算机上重建该项目。 但是,同一项目使用其他数据库驱动程序(DB2,SQL等)连接到其他数据库。 因此,当我再次在64位操作系统上部署我的应用程序时,它将引发异常“试图在32位平台上加载64位程序集。” 我正在使用Microsoft.Jet.OLEDB.4.0驱动程序来读写Excel(.xls) 回答1 我找到了解决此问题的方法。 我在问题中描述的问题基本上是由于64位OS中的Microsoft.Jet.OLEDB.4.0驱动程序不兼容而出现的。 因此,如果我们在64位服务器中使用Microsoft.Jet.OLEDB.4.0驱动程序,则必须强制我们的应用程序以32位模式进行构建(这是我在广泛搜索此已知问题时发现的答案)这会导致我的代码的其他部分中断。 幸运的是,现在Microsoft已经发布了64位兼容的2010 Office System驱动程序,可以替代传统的Microsoft.Jet.OLEDB.4.0驱动程序。
  • 如何从当前Git工作树中删除本地(未跟踪)文件(How to remove local (untracked) files from the current Git working tree)
    问题 如何从当前工作树中删除未跟踪的本地文件? 回答1 git-clean-从工作树中删除未跟踪的文件概要git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <path>…​ 描述从当前目录开始,以递归方式删除不受版本控制的文件,从而清理工作树。 通常,仅删除Git未知的文件,但是如果指定-x选项,也会删除忽略的文件。 例如,这对于删除所有构建产品很有用。 如果给出任何可选的<path>...参数,则仅影响那些路径。 步骤1是使用-n选项显示要删除的内容: # Print out the list of files and directories which will be removed (dry run) git clean -n -d 清洁步骤-当心:这将删除文件: # Delete the files from the repository git clean -f 要删除目录,请运行git clean -f -d或git clean -fd 要删除忽略的文件,请运行git clean -f -X或git clean -fX 要删除被忽略和未被忽略的文件,请运行git clean -f -x或git clean -fx 请注意后面两个命令在X上的大小写差异。 如果在您的配置clean
  • Golang的配置信息处理框架Viper
    Viper 项目地址:https://github.com/spf13/viper 本文翻译自该项目里README.md文件中的内容 有很多Go语言项目用到了Viper框架,比如: Hugo EMC RexRay Imgur’s Incus Nanobox/Nanopack Docker Notary BloomApi doctl Clairctl 什么是Viper Viper是一个方便Go语言应用程序处理配置信息的库。它可以处理多种格式的配置。它支持的特性: 设置默认值 从JSON、TOML、YAML、HCL和Java properties文件中读取配置数据 可以监视配置文件的变动、重新读取配置文件 从环境变量中读取配置数据 从远端配置系统中读取数据,并监视它们(比如etcd、Consul) 从命令参数中读物配置 从buffer中读取 调用函数设置配置信息 为什么要使用Viper 在构建现代应用程序时,您不必担心配置文件格式; 你可以专注于构建出色的软件。Viper 可以做如下工作: 加载并解析JSON、TOML、YAML、HCL 或 Java properties 格式的配置文件 可以为各种配置项设置默认值 可以在命令行中指定配置项来覆盖配置值 提供了别名系统,可以不破坏现有代码来实现参数重命名 可以很容易地分辨出用户提供的命令行参数或配置文件与默认相同的区别
  • 如何制作浅git子模块?(How to make shallow git submodules?)
    问题 可能会有浅层子模块吗? 我有一个包含几个子模块的超项目,每个子模块都有很长的历史,因此不必要地拖累了所有历史。 我所发现的只是这个未回答的话题。 我应该只是破解git-submodule来实现这一点吗? 回答1 即将发布的git1.8.4(2013年7月)的新功能: “ git submodule update ”可以选择浅浅地克隆子模块存储库。 (并且git 2.10 2016年第3季度允许使用git config -f .gitmodules submodule.<name>.shallow true进行记录git config -f .gitmodules submodule.<name>.shallow true 。 请参阅此答案的结尾) 参见commit 275cd184d52b5b81cb89e4ec33e540fb2ae61c1f: 将--depth选项添加到“ git submodule”的添加和更新命令中,然后将其传递给clone命令。 当子模块很大并且您对除最新提交以外的任何事物都不感兴趣时​​,这很有用。 添加了测试,并对缩进进行了一些调整,以符合“子模块更新可以处理pwd中的符号链接”测试文件的其余部分。 签名人:Fredrik Gustafsson <iveqy@iveqy.com> 演讲人:Jens Lehmann <Jens.Lehmann
  • 哪里在zsh中放置$ PATH变量断言?(Where to place $PATH variable assertions in zsh?)
    问题 我喜欢zsh ,但是我不确定$PATH和其他变量断言的位置? 我发现,它们散布在文件之间.zshrc .zprofile .bashrc .bash_profile ,有时一倍。 我意识到在bash文件中包含任何内容在我使用zsh看起来没有多大意义,但是我应该将rvm , python , node等添加到$PATH确切位置是什么? 我是否应该使用一个特定的文件(即,我的安装中当前不存在的.zshenv ),我当前正在使用的文件之一,或者甚至有关系? 回答1 tl; dr版本:使用~/.zshrc 并阅读手册页以了解它们之间的区别: ~/.zshrc ~/.zshenv , ~/.zshenv和~/.zprofile 。 关于我的评论 在我对凯夫给出的答案的评论中,我说: 这似乎是不正确的-我可以找到的任何zsh文档中都未列出/ etc / profile。 原来这是部分不正确的: /etc/profile可能来自zsh 。 但是,只有在zsh被“作为sh或ksh调用”时,才会发生这种情况。 在以下兼容模式下: 通常的zsh启动/关闭脚本不会执行。 登录shell源/ etc / profile,后跟$ HOME / .profile。 如果在调用时设置了ENV环境变量,则$ ENV将在配置文件脚本之后提供。 在将ENV的值解释为路径名之前,先对其进行参数扩展
  • 为什么会出现“无法连接服务器-与网络有关或与实例有关的错误”?(Why am I getting “Cannot Connect to Server - A network-related or instance-specific error”?)
    问题 尝试连接到SQL Server时出现以下错误: 无法连接到108.163.224.173。 建立与SQL Server的连接时发生与网络相关或特定于实例的错误。 服务器未找到或无法访问。 验证实例名称正确,并且已将SQL Server配置为允许远程连接。 (提供者:命名管道提供程序,错误:40-无法打开与SQL Server的连接)(Microsoft SQL Server,错误:1326) 当我尝试在Visual Studio 2010中尝试将数据库配置为gridview时,将引发此错误。我不知道如何调试此错误。 您将如何调试此错误? 除了错误消息中提到的步骤之外,我还应该采取什么步骤来确定此处实际发生的情况? 回答1 我发现以下技术很有帮助: 确保您的数据库引擎配置为接受远程连接: 开始>所有程序> SQL Server 2005>配置工具> SQL Server外围应用配置器单击“服务和连接的外围应用配置” 选择有问题的实例>数据库引擎>远程连接启用本地和远程连接重新启动实例您可能需要在防火墙上为正在使用的SQL Server实例和端口创建一个例外: 开始>运行> Firewall.cpl 单击例外选项卡添加sqlservr.exe(通常位于C:\Program Files (x86)\Microsoft SQL Server\MSSQL.x\MSSQL\Bin
  • 实时车辆行人多目标检测与跟踪系统-上篇(UI界面清新版,Python代码)
    摘要:本文详细介绍如何利用深度学习中的YOLO及SORT算法实现车辆、行人等多目标的实时检测和跟踪,并利用PyQt5设计了清新简约的系统UI界面,在界面中既可选择自己的视频、图片文件进行检测跟踪,也可以通过电脑自带的摄像头进行实时处理,可选择训练好的YOLO v3/v4等模型参数。该系统界面优美、检测精度高,功能强大,设计有多目标实时检测、跟踪、计数功能,可自由选择感兴趣的跟踪目标。博文提供了完整的Python程序代码和使用教程,适合新入门的朋友参考,完整代码资源文件请转至文末的下载链接。本博文目录如下: 文章目录 前言1. 功能及效果演示2. 视频中的目标检测3. 多目标跟踪下载链接结束语 ➷点击跳转至文末所有涉及的完整代码文件下载页☇ 代码介绍及演示视频链接:https://space.bilibili.com/456667721/(正在更新中,欢迎关注博主B站视频) 前言 前段时间博主写了一篇基于深度学习的车辆检测系统博文,里面是利用MATLAB实现的YOLO检测器,效果还不错,其完善的UI界面也受到不少粉丝的关注。最近有不少朋友发消息询问是否打算出一期Python版的车辆检测系统,其实我也早有写一篇类似博文的想法,毕竟老不更新粉丝都要跑( ๑ŏ ﹏ ŏ๑ )了。但每次想写博客又看到自己每天满满当当的日程,感觉无可奈何,没办法只得强行挤出一点点时间写点东西
  • getResourceAsStream()与FileInputStream(getResourceAsStream() vs FileInputStream)
    问题 我试图在webapp中加载文件,并且在使用FileInputStream时遇到FileNotFound异常。 但是,使用相同的路径,当我执行getResourceAsStream()时,便能够加载文件。 两种方法有什么区别?为什么一种方法有效而另一种无效? 回答1 java.io.File和consorts作用于本地磁盘文件系统。 问题的根本原因是java.io中的相对路径取决于当前工作目录。 即从中启动JVM(在您的情况下为:Web服务器的目录)的目录。 例如,这可能是C:\Tomcat\bin或完全不同的东西,但不是C:\Tomcat\webapps\contextname或您希望的任何名称。 在普通的Eclipse项目中,它将是C:\Eclipse\workspace\projectname 。 您可以通过以下方式了解当前工作目录: System.out.println(new File(".").getAbsolutePath()); 但是,工作目录绝不是以编程方式可控制的。 您确实应该更喜欢在File API中使用绝对路径,而不是相对路径。 例如C:\full\path\to\file.ext 。 您不想硬编码或猜测Java(web)应用程序中的绝对路径。 那只是可移植性的麻烦(即它在系统X中运行,而不在系统Y中运行)。 通常的做法是将此类资源放置在类路径中
  • my.cnf文件在macOS上的位置(Location of my.cnf file on macOS)
    问题 我正在尝试按照本教程进行操作,以实现对MySQL的远程访问。 问题是, my.cnf文件应该位于哪里? 我正在使用Mac OS X Lion。 回答1 MySQL论坛上的该线程说: 默认情况下,OS X安装不使用my.cnf,而MySQL仅使用默认值。 要设置自己的my.cnf,您可以直接在/ etc中创建一个文件。 OS X在/usr/local/mysql/support-files/提供了示例配置文件。 而且,如果您无法在此处找到它们,MySQLWorkbench可以通过以下方式为您创建它们: 打开连接在菜单中的“ INSTANCE”下选择“ Options File”。 MySQLWorkbench将搜索my.cnf,如果找不到,它将为您创建 回答2 如果是Mac OS X Maverick,则通过Homebrew安装MySQL时,它位于/usr/local/opt/mysql/my.cnf 回答3 通常,在Unix和类似Unix的系统上,MySQL / MariaDB程序在以下位置(按指定顺序)读取config / startup文件: /etc/my.cnf全局 /etc/mysql/my.cnf全局 SYSCONFDIR/my.cnf全球 SYSCONFDIR代表在构建MySQL时使用CMake的SYSCONFDIR选项指定的目录。 默认情况下
  • Java说FileNotFoundException但文件存在(Java says FileNotFoundException but file exists)
    问题 我为CS课分配了一个作业,该作业说要读取包含多个测试成绩的文件,并要求我对这些成绩进行求和和平均。 虽然求和平均很容易,但是我在读取文件时遇到了问题。 讲师说要使用这种语法 Scanner scores = new Scanner(new File("scores.dat")); 但是,这会抛出FileNotFoundException ,但是我一遍又一遍地检查了该文件是否存在于当前文件夹中,然后,我发现它必须对权限进行处理。 我更改了所有人的读写权限,但是它仍然无法正常工作,并且仍然不断抛出错误。 有谁知道为什么会发生这种情况? 编辑:它实际上是指向一个目录了,但是,我已经解决了这个问题。 现在file.exists()返回true ,但是当我尝试将其放入Scanner ,它将引发FileNotFoundException 这是我的全部代码 import java.util.Scanner; import java.io.*; public class readInt{ public static void main(String args[]){ File file = new File("lines.txt"); System.out.println(file.exists()); Scanner scan = new Scanner(file); } } 回答1