在程序中合法使用Windows“文档”文件夹


40

任何喜欢“文档”文件夹仅包含放置在其中的东西的人都知道标准的“文档”文件夹完全不适合此任务。每个程序似乎都希望将其设置,数据或同样不相关的内容放入“ 文档”文件夹中,尽管事实上存在专门用于此作业的文件夹1

为了使这听起来不空,以我的个人“ Documents”文件夹为例。我从来没有使用过它,因为在任何情况下我都不会自己将任何东西保存到该文件夹​​中。但是,它在顶层包含46个文件夹和3个文件,总共500个文件夹中的800个文件。那是我没有创建的190 MB的“文档”。显然,任何实际文件都会立即陷入混乱之中。

我的问题是:在未来5年内,是否可以做任何事情来改善这种状况,使“文档”再次变得有用?可以对程序员进行某种程度的教育吗?不要将其用作垃圾场?操作系统是否可以通过现有的API开始报告隐藏在AppData下的某些“假”位置,而仅允许Explorer和各种“打开/保存”对话框知道“真实的” Documents文件夹所在的位置?还是任何尝试都是完全徒劳的,甚至是不必要的?


1作为记录,以下是应代替“文档”使用的各种标准目录的快速摘要:

  • RoamingAppData用于用户特定的数据和设置。这是使用特定于用户的非暂时性的数据目录。此处放置的任何内容都可以在配置了给定用户的网络上的任何计算机上使用。但是不要在此处放置大文件,因为在这种环境下它们会降低登录/注销的速度。
  • LocalAppData用于特定用户和机器的数据和设置。每个用户和每台计算机的此数据都不同。这也是放置非常大的用户特定数据的地方。
  • ProgramData用于特定机器的数据和设置。无论哪个用户登录,它们都是相同的,并且不会漫游到网络中的其他计算机。
  • GetTempPath对于不使用时可能被擦除而不会丢失数据的所有文件。这也是缓存之地方,因为像临时数据一样,不需要备份缓存。将巨大的缓存放在这里,您将为用户节省一些备份麻烦。

“文档”本身应该只有不断地如果用户手动指定,通过输入路径或在保存对话框中选择使用。这是它唯一的一次拨款挽救的东西,在“文档”。


讨论这个想法应该采取meta.PE
乔什(Josh K)

“操作系统是否可以通过现有的API开始报告隐藏在AppData下的某些“虚假”位置,而仅允许Explorer和各种“打开/保存”对话框知道“真实的” Documents文件夹所在的位置?” 任何降低用户能力的措施都是不好的。对于用户,我指的是知道如何进行自动化编程的用户。
备用

1
我觉得有必要澄清一下,因为我运行的是Linux机器,所以我所有计算机上的Documents文件夹都没有垃圾。我知道这被标记为“ Windows”,但是在这个夸张的演讲中,您都没有提到所使用的操作系统。
sevenseacat 2011年

1
显然,这里的问题在于Microsoft允许甚至允许发生这种情况-查看Visual Studio / SQL Server Management Studio。一个有趣的问题是-在Microsoft上是否有关于此问题的好地方?
克里斯·内维尔

1
当前的OneDrive设置使情况更糟。因为它是在OneDrive中设置Documents文件夹(这实际上是一个好主意)。但是我几乎只有1个小时没有上网,直到我注意到Xamarin认为将Android NDK推送到我的(OneDrive)Documents文件夹中是个好主意。我的其他3台同步计算机自动下载了所有文件。1.9 GB ...
马特

Answers:


19

需要有一些明显的动机。例如,如果用户(在安装时)必须提供保存在Documents文件夹中的权限,则程序员将希望避免触发该可怕的对话框。

一旦获得激励,人们自然会在尝试解决这些问题时偶然发现诸如“将特定于计算机的程序数据保存在ProgramData中”之类的文档。

实际上,一个好的权限框架可以解决很多问题。


听起来有点像Mac OS X的Apple沙箱:您只能通过OS受控对话框来保存在任意位置,该对话框允许您选择保存位置。如果用户单击“确定”,它将解锁目录以供将来使用。
Laurent Bourgault-Roy

4

我的问题是:在未来5年内,是否可以做任何事情来改善这种状况,使“文档”再次变得有用?

从理论上讲,可以做些什么。从理论上讲,Microsoft可以:

  • 提出一个更好的放置用户设置文件的位置(在此过程中,认识到许多应用程序都有将设置放入文件的正当理由)。
  • 将此添加到标准Windows应用程序开发人员指南中。(我认为确实存在这样的准则。)
  • 使应用程序符合准则要大事,例如通过某种认证或创建和发布一致性记分卡。“命名和羞辱”可以创造奇迹...

必须说,苹果在传统上对这种事情更加主动。它显示了他们平台上运行的内容的质量。


4
值得注意的是,微软本身就是一个大罪犯(或者至少一些微软团队是大罪犯)。
彼得·泰勒

完全同意“大事”的观点。至于更好的地方-我认为漫游配置文件还算不错,只是太多的人对此一无所知,或者更糟的是在其中放入了大文件(超过2GB)。尤其是游戏...
Roman Starkov

2

我认为您回答这个问题的原因可以归结为对程序员的教育。我对Windows API知之甚少,并且存储内容Documents是否特别容易,但是如果不是这样,则应用程序不应污染它。我认为这归因于每个用户都可以知道数据所在的位置。对于您讨论的数据,Mac OS X使用该~/Library文件夹,尽管某些应用程序仍将其保留在Documents。也许Windows应该存在类似的东西?

就个人而言,我将我的文档放在Dropbox根目录下的同名文件夹中,这确实为我增加了工作量,但使我免于遇到的问题。


2

尽管我知道您想参加有关使开发人员停止执行此操作的讨论,但它可能最终成为无法停止的任务栏通知图标之类的东西之一,因此Microsoft只是将其扫地出门。

我以前曾在博客中介绍过Documents文件夹,就像将其移出不良邻居一样。作为用户,我想出了很多方法来尝试自行清理。我会将所有未邀请的文件夹标记为“隐藏”,这将使它们从资源管理器中消失。我会将用于Visual Studio 2005、2008、2010文件夹的符号链接创建到常见的“ Visual Studio”文件夹等中。

但是即使使用PowerShell脚本对其进行自动化,我也厌倦了在我使用的每台新计算机上进行操作。幸运的是,在Windows 7中,还有一个对我来说效果很好的选项。

由于Windows 7倾向于默认使用“文档” 而不是“文档” 文件夹。我只是从该库中删除了%userprofile%\ documents文件夹,而是添加了我的Dropbox文件夹。因此,现在打开/保存对话框默认为该位置,当我单击开始->文档时,它将带我到我的Dropbox。

最终,我希望看到类似于iOS App Store指南的应用程序的某种基本认证。但是他们甚至无法让驱动程序制造商签署驱动程序...


1
因此,换句话说,您认为无法采取任何措施来挽救它,但这没关系,因为周围有更好的想法。+1。
罗曼·斯塔科夫

1

我认为长期的策略应该是停止在文件中存储除文档以外的任何内容。系统数据(尤其是设置)应存储在类似于数据库而不是文件系统的存储系统中。如果该数据库可以轻松,自动地与Web上的服务同步,则可以得到加分,因此,无论您使用多少台计算机以及在哪里使用计算机,您都可以有效地进行一组设置。

我对文件系统的历史了解不多,但是在我看来,它是在系统上很早就意识到的,可执行文件是与文档根本不同的“事物”。因此,这些文件被存放在一个特殊的文件夹(然后称为目录)中C:\DOS,而用户基本上可以控制其余的驱动器。

没人能真正预言这些年来会变得更加复杂和难以管理的系统,以及这将会带来多大的混乱。我认为是时候从头重新考虑技术并利用云的协同作用了。如果在公司开始实施可行的开源解决方案之前就获得了奖励点:)


3
采取相反的做法是否更有意义,即仅将系统内容存储为文件,并在数据库中提供用户数据,尤其是通过Web服务进行同步时?
罗曼·斯塔科夫

1
嗯,细节当然需要充实……但是我要说明的重点是,只有真正意义上的文档(即用户实际处理的文件与运行系统无关)进入文件的隐喻。
Timwi'2

另外,我不确定这是否可以解决问题。如果程序可以访问专用于用户文档的存储系统,则它们仍可以在其中放置垃圾。所需要的是通过技术手段或使程序员自愿停止的方式来阻止程序执行此操作。
罗曼·斯塔科夫

收银机就是这样一个系统,效果不佳。我认为应用程序数据存储程序使用自己的设置存储文件的方法并不那么糟糕。
Pieter B

1

即使某些程序仍将某些数据存储在Documents中,我认为大多数数据都将其数据存储在AppData中,所以它们已经朝着正确的方向发展,但是用户却无能为力:每个程序都要对其负责做。


1
我同意; 用户很无奈。这只能由程序员解决。
罗曼·斯塔科夫

1

解决方案:
1.右键单击“文档”文件夹,然后选择“位置”选项卡。
2.将“文档”位置更改为我选择“ C:\ Admin \ Configs”的其他位置(一旦完成,写入“文档”的所有应用程序都应发送到C:\ Admin \ Configs。

但这只能解决一半的问题,下一步应该很明显。

  1. 在“ C:\ User \\ Documentation”中创建一个新文件夹

然后,您应该能够将该目录添加到库中并删除旧目录,我特意在'C:\ User \ ** Documentation **'中设置了不同的文件夹名称,因为我想确保没有任何东西可以只是硬路径夹。

由于上述事实,如果文件夹“ documents”再次出现在您的C:\ User \中,只需右键单击该文件夹并将其设置为不可见的文件夹。


0

将设置存储在文本文件中是一种全面的跨平台解决方案。

除非开发人员要创建跨平台设置数据库标准,否则我认为我们大多数人都会继续使用转储到用户目录中的文本文件。

我们这些精明的人会为允许专用设置存储引擎(例如Windows注册表)的系统创建不同的设置界面。


1
请注意,“文档”文件夹不是“用户”目录。“文档”文件夹是一个子目录用户的目录,它的意图是应该成能够在用户保存自己的文档。问题是程序决定将它们的内容也放入“ Documents”文件夹中,即使程序设置有更好的地方(并以此进行记录)。
Dean Harding

1
这是通往文档混乱的一条很好的例子。人们在不了解Windows的情况下移植了一个程序,然后将它们的内容转储到了想到的第一个目录中。查找“文档”可能比查找“ AppData”要容易得多,尤其是因为后者涉及确定是将其放入漫游配置文件还是本地配置文件-对于不涉及Windows开发的任何人来说都不熟悉。
罗曼·斯塔科夫

再次同意-真正的解决方案是拥有一个标准的跨平台设置存储引擎。
Craige

1
不会发生。最初的问题是关于重新培训所有Windows程序员,而您的答案是重新培训每个程序员。您也不会让Unix / Linux程序员购买设置数据库,因为有充分的理由将它们保留为文本文件,并且您将面临以Microsoft方式处理事务的额外阻力。
David Thornley
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.