【问题标题】:c# how to determine the full file path of a file? [closed]c#如何确定一个文件的完整文件路径? [关闭]
【发布时间】:2020-02-28 15:34:48
【问题描述】:

在我的代码中,我使用计算机上的文件在完成任务时记录信息。要读取和写入它们,我已经在代码中编写了完整的文件路径。现在还可以,因为我总是使用同一台计算机,但是如果我必须在另一台计算机上使用它或决定让其他人使用它,那么将会出现错误,并且必须重写很多行以适应匹配新文件位置。

有没有一种方法可以在程序启动时找到文件的存储位置并将其用作整个代码中的变量?

【问题讨论】:

  • Path 类中有各种实用程序。
  • 默认位置是exe文件所在的文件夹。可以使用环境变量。如果文件位于网络驱动程序上,请使用 URI 位置 \\ 而不是映射的驱动器号,这样它就可以在任何机器上运行。

标签: c# filepath


【解决方案1】:

您不想确定(找出)文件的路径。您想要定义(声明)这些文件的路径。在您可能从程序中编写的所有文件中,日志文件是特殊的:

  • 您不寻找它们或让用户寻找它们。您决定它们应该在哪里,然后在那里创建它们。
  • 通常您希望能够优雅地处理异常并继续。如果日志文件创建失败,您甚至不应该这样做。我通常会在那里退出。如果没有别的,只是为了避免不可调试的后续错误(因为你没有日志文件)。
  • 我的正常建议是永远不要打开文件句柄。 “创建。使用。处理。全部在同一段代码中,最好使用 using 块。”日志文件是例外。您不能冒无法写信给他们的风险,因为有一些可以避免的干扰。 GC 和终结器将足够可靠地清理该句柄
  • 您应该始终使用日志文件。不要尝试登录数据库。这只会增加额外的可能问题。这又可能导致您无法获得所需的调试信息。

您不能将此类文件放入程序目录中。写入权限的限制将成为阻碍。从正确的角度来看,最可靠的地方是用户资料。如果用户没有对他自己的个人资料的写入权限,则某些内容已超出您的修复能力。不要硬编码路径,使用 specialfolders enumeration 从 Windows 中检索它。

【讨论】:

  • 感谢您的信息。在我的程序中,我还使用了一个包含图片的文件夹,这些图片被转换为字节数组以供以后使用(它与 twitter 交互)。我该怎么做?我应该将它们预先转换为数组并在源代码中包含它吗?感觉太长了
  • @Obmama:安装程序/更新程序始终具有对程序文件夹的完全访问权限。但是程序本身通常只有 read 访问它自己的文件夹。因此,根据您需要更改这些图像的频率,安装程序可以执行此操作,或者您需要将其放入特殊文件夹中。如果你有很多图像,将它们存储在/与数据库中甚至可能是有益的。此处讨论了 2-3 个选项:red-gate.com/simple-talk/sql/learn-sql-server/…
【解决方案2】:

你可以使用

var fullpath = System.IO.Path.GetFullPath(file);

或者如果你想使用像My Documents这样的特殊文件夹

var mydocs = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
var filepath = System.IO.Path.Combine(mydocs, "filename.txt");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 2016-03-31
    • 2016-05-10
    • 2015-11-03
    • 1970-01-01
    相关资源
    最近更新 更多