Visual C#-在何处存储处理文件&;是否工作而不是C:\ProgramFiles?

Visual C#-在何处存储处理文件&;是否工作而不是C:\ProgramFiles?,c#,.net,winforms,C#,.net,Winforms,我对编程相当陌生,我不知道所有的最佳实践,所以在这里我要问的是,当涉及到文件处理的位置时,最佳实践是什么 我创建了一个Winforms程序,可以进行视频剪辑/转换。我的程序目前安装在用户的C:\ProgramFiles(x86)目录中,我将视频处理所需的所有文件都放在那里。不幸的是,为了在运行时访问这些文件并移动它们,需要提升UAC。我目前将程序设置为以管理员身份运行,但我不想再要求程序必须以管理员身份运行 那么,最佳做法是什么呢?在安装过程中,我应该将这些文件放在哪里?如何在不以管理员身份运行

我对编程相当陌生,我不知道所有的最佳实践,所以在这里我要问的是,当涉及到文件处理的位置时,最佳实践是什么

我创建了一个Winforms程序,可以进行视频剪辑/转换。我的程序目前安装在用户的C:\ProgramFiles(x86)目录中,我将视频处理所需的所有文件都放在那里。不幸的是,为了在运行时访问这些文件并移动它们,需要提升UAC。我目前将程序设置为以管理员身份运行,但我不想再要求程序必须以管理员身份运行

那么,最佳做法是什么呢?在安装过程中,我应该将这些文件放在哪里?如何在不以管理员身份运行程序的情况下访问它们


Ps:我不再希望我的程序以管理员身份运行的原因是,允许将文件拖放到windows窗体上非常困难。

一般解决方案是保留应用程序二进制文件和不会在
%ProgramFiles%
中更改的文件,但将在
%AppData%
中修改的文件放入。这不需要管理员权限,而且您通常不希望每个用户的文件都相同,这样就方便了。您可能还想使用
本地
漫游
,具体取决于您存储的文件类型,但使用
漫游
似乎是软件最常见的事情


另一种方法(至少我对一些做得不好的程序是这样做的)是进入软件目录属性,给普通用户在那里写东西的权利。但是,我不确定如何在一个安装程序中完成它,而且我不认为这是一个好的实践(当你使用旧软件时更容易解决问题)。看一下,你会把你的路径建立在其中的一个应用程序上,也许是Apple数据或LoopApple数据。通常,您会在其中一个目录中创建一个子目录,其中包含公司、产品或程序名称,以及用于数据、配置、日志等的子目录。如果给定,该视频可能非常大,您会希望为用户提供一种设置数据路径的方法(例如,用户可能希望使用不同的驱动器,如ssd)。因此,请从SpecialFolder枚举中提供默认值,但允许用户使用用户提供/选择的路径覆盖它。

环境。GetFolderPath(Environment.SpecialFolder.CommonApplicationData)(例如C:\ProgramData\)是存储软件所有用户共享的数据的好地方。所有用户都可以访问数据,因此请记住这一点,以保护隐私


Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
(例如C:\Users\Username\AppData\Local\)是存储数据的好地方,如果用户从另一台计算机登录到网络,则不需要同步这些数据。例如,在这里存储调试日志是有意义的


Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
(例如C:\Users\Username\AppData\Roaming\)。如果用户从另一台计算机登录到网络,存储需要同步的数据的好地方。例如,在这里存储ini文件是有意义的,因为用户希望具有与以前相同的设置


Path.GetTempPath()
(例如C:\Users\Username\AppData\Local\Temp)是存储软件关闭后不需要存在的文件的好地方。

我认为最好的做法是将工作目录(不断修改的文件)与应用程序的其余部分分开。这也会阻止UAC的提示,非常感谢!我特别欣赏在运行时定位这些路径的代码:)