【问题标题】:Running Program from USB drive [closed]从 USB 驱动器运行程序 [关闭]
【发布时间】:2014-11-03 15:27:45
【问题描述】:

我有一个 C# winForms 程序,旨在从多台 PC 上运行 USB 驱动器。当我将 USB 驱动器连接到另一台 PC 时,驱动器号会发生变化。如何使我的驱动器号在所有 PC 上保持一致,或者使我的程序真正“便携”。我需要驱动器号,因为我有一个指向某个目录的 SQLite 数据库数据源。我也有从具有特定驱动器号的某个目录打开的 PDF 文件。谢谢

【问题讨论】:

  • 为什么首先需要驱动器号?
  • 您可以使用 try-catch 尝试 USB 驱动器的字母。您在 USB 驱动器中的文件路径不会改变。它最终会抓住正确的条件。
  • 我需要驱动器号,因为我有一个指向某个目录的 SQLite 数据库数据源。而且我还有从具有特定驱动器号的某个目录打开的 PDF 文件。

标签: c# winforms portability


【解决方案1】:

可以得到执行的汇编路径。

string path = (new System.Uri(Assembly.GetExecutingAssembly().CodeBase)).AbsolutePath;

从那里,您可以获得驱动器号(路径根):

string drive = Path.GetPathRoot(path);

如果你的文件和可执行文件在同一目录下,你可以像这样获取文件路径:

string directory = Path.GetDirectoryName((new System.Uri(Assembly.GetExecutingAssembly().CodeBase)).AbsolutePath);
string databaseFile = Path.Combine(directory, "filename.dbf");

【讨论】:

  • 啊..@PatrickHofman ...再次。愿意告诉我们这个答案有什么问题吗?
  • @Benjamin 问题是我们可以猜测,但完全不清楚 OP 在问什么。如果是“我怎样才能得到我的可执行文件所在的目录?”,那么这是重复的,已经在网站上回答了几十次,不应该回答,而是这样标记.
  • 我正在回答这个问题:“我怎样才能使我的驱动器号在所有 PC 上保持一致,或者使我的程序真正“可移植”。”,或者更确切地说是我对这个问题的解释。
  • 不......他说“或者......让程序真正可移植”......因为这消除了对硬编码驱动器路径的需求......这是一个有效的答案。
  • @PatrickHofman:谢谢,这更清楚了。
【解决方案2】:

我猜你需要应用程序的目录。

string path = System.IO.Directory.GetCurrentDirectory();

(如果您拨打SetCurrentDirectory(),请使用:System.IO.Path.GetDirectoryName(new System.Uri(System.Reflection.Assembly.GetExecutingAssembly().CodeBase).LocalPath);

你想要你的驱动器吗? (驱动器总是 1 个字母)

path.Substring(0, 2);

如果不是一个字母,

path.Substring(0, path.IndexOf('\\') + 1);

【讨论】:

  • 你必须小心使用它,因为有人可以调用 SetCurrentDirectory()
  • 我需要驱动器号,因为我有一个指向某个目录的 SQLite 数据库数据源。而且我还有从具有特定驱动器号的某个目录打开的 PDF 文件。
  • @ehuizar 好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-03
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-09
相关资源
最近更新 更多