开发过程中数据文件夹的正确位置在哪里 C# deskTop 应用程序

where is the correct location for Data folder in developing process C# deskTop app

我用 C# 编写桌面应用程序....此应用程序将自动为嵌入式系统项目生成 C/C++ 代码
所以我必须将一些 pre_writen 驱动程序复制到目标文件夹(生成文件的位置)

问题是我不知道在哪里可以正确地放置源驱动程序!!

现在我将源驱动程序放在项目文件夹中,然后在我的代码中引用它

            // projectfolder\bin\Debug\netcoreapp3.1\file.exe
            string path = (Assembly.GetExecutingAssembly().Location);
            DirectoryInfo exeDir = new DirectoryInfo(path);
            DirectoryInfo projectDir = exeDir.Parent.Parent.Parent.Parent;
            // now i can get the driver foler like this
            string DriverPath = Path.Combine(projectDir.fullName,"drivers");

我猜 product 级别的文件夹将在 C:\ProgramData 但是为了开发位置应该在什么地方?

Environment.CurrentDirectory + "\Folder"

中的 c# 桌面应用程序中的默认位置

这主要是数据更改频率的问题。自从 NTFS 变得普遍以来,这将如何与非常严格的写权限管理相互作用(虽然该规则早于 NTFS,主要是 FAT - 因此没有权利阻止我们 - 很少有程序员关心)。

您可以甚至应该将内容放入 Programm 目录本身,如果它不会在 Programm 之外更改 Updates/Reinstallations。如果它仅随安装程序或更新程序更改 - 无论如何都需要管理权限才能工作 - 它属于那里。

如果更改发生得更频繁,那么——尤其是那些可以在运行时更改甚至需要在运行时更改的内容——程序文件夹将变得无法使用。在这种情况下,programm 目录的顶部应该包含一个模板文件。您可以将一些东西作为基线复制到真实目录,以便开始工作。至于把这个多变的数据放在哪里,看SpecialFolders Enumeration。 Userprofile - 特别是 Appdata 文件夹是要查看的重点。具体使用哪个是您希望它如何与域控制器同步(漫游与非漫游用户)交互的问题。或者,如果您希望它以 Common 结尾。

驱动程序听起来像那种罕见的情况,programm 目录完全适合。您可以选择将驱动程序安装为并行应用程序。可以单独 managed/updated 的东西,只是您程序的要求。可能在多个应用程序之间共享的内容。

In Windows there are different types of data that may be consumed by an Application such as

  • 应用程序属性

    应用程序设置使您能够动态存储应用程序信息。设置允许您在客户端计算机上存储不应包含在应用程序代码中的信息。

    例如: 位置、字体、样式、用户配置
    文件类型: App.Config(在设计时创建,默认放入 BIN 文件夹)和 User.Config(在 运行 时创建)
    项目 > 添加新项 > 已安装 > Visual C# 项 > 应用程序配置文件


  • 申请资料

    包含已安装软件和 UWP 应用所需的所有数据、设置和用户文件。这些是用户不可知的数据。

    例如: 图像、资源、精灵、数据模板、txt 文件。它还可能包含 App.Config 个文件

    文件位置: C:\ProgramData Environment.SpecialFolder.CommonAppData


  • 用户数据

    包含用户特定的所有数据,例如 his/her 应用特定设置。

    例如:任何类型的数据

    文件位置: C:\Users\[USERNAME]\AppData\Roaming Environment.SpecialFolder.AppDataEnvironment.SpecialFolder.MyDocuments


i guss that folder in the product level will be in C:\ProgramData but for developing where the location shoud be in ?

是的,它会转到 ProgramData,但在开发过程中,您可以将它放在 BIN 文件夹或您选择的目录中(如果重要的话)

然而,当您将应用程序打包到 MSI 并捆绑所有依赖文件以及它们需要去的地方时,上述大部分内容都会出现。



编辑

根据评论中的 OP 说明,.CPP 文件将自动进入您的 C# 应用程序的 BIN/Debug 文件夹。
您需要将设备驱动器动态放置在您的 exe 运行ning

所在的目录中

要访问您的应用所在的目录 运行ning :

string exePath = System.Reflection.Assembly.GetExecutingAssembly().Location Path 的输出 = 您的 exe 所在的绝对路径 运行ning C:\Users\User1\source\repos\Test\Test\bin\Debug\Test.exe

string exeDirectory = Path.GetDirectoryName(exePath); 您的exe所在的目录路径 C:\Users\User1\source\repos\Test\Test\bin\Debug