我正在编写一个控制台实用程序来对命令行上指定的文件进行一些处理,但是我遇到了一个我无法通过Google/Stack Overflow解决的问题.如果指定了完整路径(包括驱动器号),如何将该路径重新格式化为相对于当前工作目录?
必须有类似于VirtualPathUtility.MakeRelative函数的东西,但如果有,它就会让我失望.
我目前正在尝试从特定文件夹启动可执行文件.
我下面的代码奇怪地崩溃了应用程序:
Process p = new Process();
p.StartInfo.WorkingDirectory = "dump";
p.StartInfo.FileName = s;
p.Start();
Run Code Online (Sandbox Code Playgroud)
我调试它,它说它找不到要启动的文件,但文件/文件夹defintly存在,我的语法不好?
下面的代码可以工作,但是没有定义工作的directroy,因此无法找到可执行文件
Process.Start(@"dump\", s);
Run Code Online (Sandbox Code Playgroud) 我里面有以下方法class DBConnection.我调用这样的方法:SQLiteConnection conn = DBConnection.OpenDB();当我想打开一个连接时,我可以执行我的查询.当我想关闭连接时,我可以调用类似的方法.
方法:
public static SQLiteConnection OpenDB()
{
try
{
//Gets connectionstring from app.config
string myConnectString =
ConfigurationManager.ConnectionStrings[
"LegMedSQLLite.Properties.Settings.LegMedSQLLiteDBConnectionString"].ConnectionString;
var conn = new SQLiteConnection(myConnectString);
conn.Open();
return conn;
}
catch (SQLiteException e)
{
MessageBox.Show(e.ToString(), "TEST");
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
这一切都很好,花花公子.问题是尝试捕获.让我们想象以下场景:
永远不会抛出异常.实际上,我偶然发现的第一个问题是当我执行我的第一个查询时 - 它认为没有这样的表,它会抛出自己的异常.我被这种奇怪的现象震惊了,但我很快发现SQLite创建了一个新的 空数据库.空是意味着没有表,没有,只是一个SQLT数据库文件与旧数据库同名,应该在那里.
这是一个问题,我希望应用程序在我尝试调用时立即知道是否存在错误(数据库未找到,已损坏,被其他进程使用等)SQLiteConnection conn = DBConnection.OpenDB();.
当然,我可以尝试在我的方法中调用File.Exists,但这似乎不是一个合适的解决方案.有帮助吗?
要获取应用程序的根目录,我目前正在使用:
Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase).Substring(6)
Run Code Online (Sandbox Code Playgroud)
但这让我觉得草率.有没有更好的方法来获取应用程序的根目录并将其设置为工作目录?