作为开发人员,我应该如何使用 Windows Vista(和 Windows 7)中的特殊文件夹?

     2023-02-25     183

关键词:

【中文标题】作为开发人员,我应该如何使用 Windows Vista(和 Windows 7)中的特殊文件夹?【英文标题】:As a developer, how should I use the special folders in Windows Vista (and Windows 7)? 【发布时间】:2010-12-06 01:53:46 【问题描述】:

我应该在哪里保存与我的应用程序相关的数据?我应该在哪里保存配置文件?我应该在哪里保存临时文件?我应该在“文档”中进行吗? “应用程序数据”?等等……

将数据保存到磁盘的最佳做法是什么(我猜,特殊文件夹的最佳做法?!)?

【问题讨论】:

【参考方案1】:

ApplicationData:您的应用程序需要作为“每用户”数据且不属于其他类别的所有内容。标准配置文件会放在这里。

CommonApplicationData:所有非“每用户”数据。

LocalApplicationData:每个用户的非漫游数据。例如,您希望确保它仅存储在这台机器上的所有内容(如机器激活码,通常还有缓存/临时数据)。标准的临时文件会放在这里。

MyDocuments:用户实际会识别为“可识别的单个文档”的用户数据。

如果你不关心文件名,你也可以使用 tempfile API 在temp 目录中生成一个临时文件。您不应该手动执行此操作。例如,在.NET 中,您可以为此目的使用Path.GetTempFileName()

【讨论】:

+1 以获得有用的答案,特别是关于“每个用户”的区别。但我不清楚粗体字的名称是什么......文件夹的字面名称?不……图书馆? .NET 用来引用文件夹的某种抽象? @LarsH:“但我不清楚粗体的名称是什么......” 它们是 .Net Environment.SpecialFolder 枚举常量 - 尝试单击它们。 :-)【参考方案2】:

来自Windows 7 Client Software Logo Program:

默认情况下应将应用程序安装到 Program Files 文件夹。由于安全权限,用户数据或应用程序数据绝不能存储在此位置 %ProgramFiles% 用于原生 32 位和 64 位应用程序,%ProgramFiles(x86)% 用于在 x64 上运行的 32 位应用程序,分别覆盖彼此的数据和设置。 必须在计算机上的用户之间共享的所有应用程序数据都应存储在 ProgramData 中 特定用户专有且不与计算机的其他用户共享的所有应用程序数据必须存储在 Users\\AppData 切勿直接写入“Windows”目录和/或子目录。使用正确的方法安装文件,例如字体或驱动程序 在“每台机器”安装中,用户数据必须在首次运行时写入,而不是在安装期间写入。这是因为在安装时没有正确的用户位置来存储数据。应用程序在安装后尝试在机器级别修改默认关联行为将不成功。相反,必须在每个用户级别声明默认值,这样可以防止多个用户覆盖彼此的默认值。

【讨论】:

【参考方案3】:

AppData 应该是自动配置和配置文件,文档应该只是用户保存的文件。我会将在多个系统中可能有用的任何东西放在 AppData/Roaming 中,并将其他任何东西(特定于机器的)放在 AppData/Local 或 LocalLow 中。对于临时文件,请使用 Temp 目录。

【讨论】:

我同意。当我安装的应用程序创建目录和/或将文件存储在(我的)文档中时,我讨厌它。 你能根据 Environment.SpecialFolder 枚举来翻译你的答案吗? Environment.GetFolderPath(Environment.SpecialFolder.xxx)【参考方案4】:

一般来说,Windows 的最佳做法是遵循适当的环境变量。您想要保留的配置数据应该放在 %APPDATA% 中,临时文件应该放在 %TEMP% 中。

这样做的好处是,如果 Windows 发生变化,不会造成严重破坏,并且尊重人们可能拥有的奇怪配置。

另外,我同意其他答案,即“文档”应仅用于用户创建的数据并且仅在提示之后。

【讨论】:

【参考方案5】:

此外,您应该使用 SHGetFolderPath 或 SHGetKnownFolderPath(在 Vista+ 中)来获取路径。无论当前安装的版本或语言如何,这将为您提供当前系统上的正确位置。切勿对您正在使用的任何路径进行硬编码。

【讨论】:

作为开发人员,我应该啥时候测试我的网站?

】作为开发人员,我应该啥时候测试我的网站?【英文标题】:Asadeveloper,whenshouldItestmywebsite?作为开发人员,我应该什么时候测试我的网站?【发布时间】:2017-04-2901:38:42【问题描述】:在我发布我的网站后,我想在几个浏览器... 查看详情

如何在共享的 Windows 机器上创建一个所有开发人员都可以推送到的 git 存储库

】如何在共享的Windows机器上创建一个所有开发人员都可以推送到的git存储库【英文标题】:Howtocreateagitrepositoryonasharedwindowsmachinewhichalldeveloperscanpushto【发布时间】:2015-12-0721:27:10【问题描述】:我在局域网上的共享Windows机器上... 查看详情

作为一个新的 Objective-C 开发人员,使用 ARC 应该注意哪些与内存相关的问题?

】作为一个新的Objective-C开发人员,使用ARC应该注意哪些与内存相关的问题?【英文标题】:AsanewObjective-Cdeveloper,whatmemory-relatedissuesshouldIwatchoutforusingARC?【发布时间】:2012-02-2216:50:10【问题描述】:最近我开始为iOS5设备编写Object... 查看详情

使用 Codeigniter,我如何向其他开发人员隐藏 Paypal 凭据?

...在此处找不到很好的答案。所以基本上我使用bitbucket.org作为我的git系统。我的应用程序使用api用户名、密码、签名等贝宝凭据。什么是最好和最安全的方法 查看详情

如何安装 JRE 或 JDK 以在 Windows 7 上运行 Android 开发人员工具?

】如何安装JRE或JDK以在Windows7上运行Android开发人员工具?【英文标题】:HowdoIinstallaJREorJDKtoruntheAndroidDeveloperToolsonWindows7?【发布时间】:2013-03-0403:11:40【问题描述】:我正在尝试在我的Windows7计算机上安装Android开发者工具,以便... 查看详情

为啥我应该说服开发人员使用端口 587 进行所有 SMTP 通信?

】为啥我应该说服开发人员使用端口587进行所有SMTP通信?【英文标题】:WhyshouldIconvincedeveloperstouseport587forallSMTPcommunication?为什么我应该说服开发人员使用端口587进行所有SMTP通信?【发布时间】:2011-03-2922:27:18【问题描述】:使... 查看详情

为啥我应该说服开发人员使用端口 587 进行所有 SMTP 通信?

】为啥我应该说服开发人员使用端口587进行所有SMTP通信?【英文标题】:WhyshouldIconvincedeveloperstouseport587forallSMTPcommunication?为什么我应该说服开发人员使用端口587进行所有SMTP通信?【发布时间】:2011-03-2922:27:18【问题描述】:使... 查看详情

从哪里开始作为前端 WPF / Xaml 开发人员 [关闭]

】从哪里开始作为前端WPF/Xaml开发人员[关闭]【英文标题】:WheretostartasfrontendWPF/Xamldeveloper[closed]【发布时间】:2016-01-2817:34:31【问题描述】:应该自定义控件,甚至更改一些应用程序样式,例如,更改滑块的拇指或向滑块栏添加... 查看详情

mercurial:两个windows开发人员,我的pc上的中央存储库。我应该在中央存储库中工作还是从中克隆?(代码片段)

可以在中央存储库中工作,还是“禁止不行”?让我们说在我的电脑上我有一个名为C:Src的中央存储库。我可以在该存储库中自行开发,还是那种糟糕的形式?克隆一个名为C:MySrc的新目录会更好吗?C:Src在网络上共享,其他... 查看详情

开发人员应该了解哪些有用的按位运算符代码技巧? [关闭]

】开发人员应该了解哪些有用的按位运算符代码技巧?[关闭]【英文标题】:WhatUSEFULbitwiseoperatorcodetricksshouldadeveloperknowabout?[closed]【发布时间】:2010-12-0417:22:56【问题描述】:我必须说我从来没有使用按位运算符的理由,但我确... 查看详情

有没有理由为啥 Web 开发人员不使用 CSRF 作为登录页面

】有没有理由为啥Web开发人员不使用CSRF作为登录页面【英文标题】:AretherereasonwhywebdevsdontuseCSRFforloginpages有没有理由为什么Web开发人员不使用CSRF作为登录页面【发布时间】:2016-05-1202:24:42【问题描述】:我最近意识到我正在运... 查看详情

如何作为 Android 应用的 alpha 测试人员发送崩溃报告?

】如何作为Android应用的alpha测试人员发送崩溃报告?【英文标题】:HowtosendcrashreportsasanalphatesterforanAndroidapp?【发布时间】:2016-05-0613:12:29【问题描述】:我正在使用我在封闭Alpha版中上传到我的Google开发人员面板的应用。我设法... 查看详情

在 Linux 上为 Windows 开发人员调试

】在Linux上为Windows开发人员调试【英文标题】:DebuggingonLinuxforWindowsDeveloper【发布时间】:2009-04-1412:33:46【问题描述】:我主要在Windows机器上完成了基本(新手级别)软件开发,但我一直有MSVisualStudio来帮助我逐步完成调试过程... 查看详情

如何开发Windows定时任务?

】如何开发Windows定时任务?【英文标题】:HowtodevelopaWindowsscheduledtask?【发布时间】:2010-09-2922:45:34【问题描述】:我需要有一个流程,将日常数据编译成PDF,然后附加到电子邮件中。我已经在正在开发的应用程序中使用MSSQL发... 查看详情

我应该使用 DirectInput 还是 Windows 消息循环?

】我应该使用DirectInput还是Windows消息循环?【英文标题】:ShouldIuseDirectInputorWindowsmessageloop?【发布时间】:2011-01-1100:51:21【问题描述】:我正在开发C++DirectX2D游戏,我需要键盘和鼠标输入。***说:Microsoft建议新应用程序使用Window... 查看详情

为啥要使用托管(C# 和 .NET)或本机代码进行 Windows API 开发?

】为啥要使用托管(C#和.NET)或本机代码进行WindowsAPI开发?【英文标题】:WhywouldIwanttousemanaged(C#and.NET)ornativecodeforWindowsAPIdevelopment?为什么要使用托管(C#和.NET)或本机代码进行WindowsAPI开发?【发布时间】:2012-05-2305:18:32【问题... 查看详情

C# 开发人员在使用 WPF 之前应该知道啥 [关闭]

】C#开发人员在使用WPF之前应该知道啥[关闭]【英文标题】:WhatshouldaC#developerknowbeforeusingWPF[closed]C#开发人员在使用WPF之前应该知道什么[关闭]【发布时间】:2011-05-1106:45:01【问题描述】:我更像是系统管理员和网站管理员,而不... 查看详情

Windows 上的 Unicode 基础知识

】Windows上的Unicode基础知识【英文标题】:UnicodeBasicsonWindows【发布时间】:2009-02-1109:42:53【问题描述】:我有一个C++库,我将它提供给其他开发人员。其中一个需要i18n,所以他问我是否可以在API中的字符串中添加L前缀。我对i18n... 查看详情