【问题标题】:Writing files to Temp Path creates random named folders将文件写入临时路径会创建随机命名文件夹
【发布时间】:2012-11-18 09:07:31
【问题描述】:

我在将数据库连接设置写入位于用户临时目录的文件中的应用程序中遇到了一个稍微奇怪的问题。

我使用标准调用 - GetTempPath,然后使用此路径保存文件。我构建我的应用程序并进行部署。 99/100 机器工作 - 并将他们的文件保存在用户临时目录中,包括 XP 和 Win7 用户。

但是,我注意到一个用户(Win 7 Pro 64bit),每次程序在用户临时路径中创建连接文件时,它都会在临时路径中创建一个新文件夹(大约 5/6 个随机字符)目录并将文件保存在那里!这意味着每次用户重新启动应用程序时,都无法检索设置(因为无法保存上次使用的随机文件夹!),用户实际上丢失了他们的设置。所以程序只是一次又一次地在临时路径中创建新的随机文件夹。奇怪!

有没有其他人遇到过这个问题,或者有人知道这里可能发生了什么吗?我怀疑它与操作系统有关,而不是我的代码。

【问题讨论】:

  • 为什么要使用临时目录进行设置,而不是使用 .NET 中处理设置的常规方法之一?
  • 用户的设置是如何临时的?
  • 为什么不将它们存储在用户的应用数据文件夹中?或者某些可能位于用户个人资料下的位置?请在 API 调用中添加您的代码,以便有人可以提供更好的帮助
  • 粗略猜测:可能与文件/目录权限有关。但是,将设置存储在临时文件夹中可能不是一个好主意。为什么不使用 Properties.Settings 和 Visual Studio 中的设置编辑器?
  • 公平的,现在不确定我为什么选择临时目录,当时一定是有原因的,嗯。好吧,我没有使用设置文件,因为我想以嵌套方式存储设置,而 Properties.Settings 似乎只以键值对的方式存储东西。

标签: c# io


【解决方案1】:

Path.GetTempPath 只获取临时文件所在的文件夹。听起来你正在使用Path.GetTempFileName

根据设计,第一句话说“在磁盘上创建一个唯一命名的零字节临时文件并返回该文件的完整路径。”。它不会返回已经存在的临时文件。如果你想临时设置一个很好的函数来调用,但记住函数不会返回相同的位置,除非它可以使文件零字节长。

如果您想再次访问该文件,请将设置文件放在其他位置或使用更多permanent solution(这允许您设置默认值并在运行时更改/保存/加载)。如果您想特别懒惰,请在键盘上创建一个 guid 或混搭随机字母(sdhfuisdhfusdhc)并将其用作硬编码文件名。示例:Path.GetTempPath()+"sdhfuisdhfusdhc";

【讨论】:

  • 否 - 我正在使用 Path.GetTempPath,它仍在临时目录中创建随机子文件夹。
  • @Vidar 哦!好吧,我确信它遵循与 GetTempFileName 相同的规则。它可能只是创建一个文件夹而不是一个文件。真的,我会很懒惰,去硬编码随机字母混搭文件名/文件夹名。但我认为这个答案有你需要知道的一切吗?
猜你喜欢
  • 2018-08-17
  • 2013-12-06
  • 2021-03-24
  • 1970-01-01
  • 1970-01-01
  • 2019-05-17
  • 2019-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多