Search code examples
c#filesystemsdesktop-applicationdesktopappdata

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


i write desktop app in C# .... this app will auto generate an C/C++ code for an embededd system project
so i have to copy some pre_writen drivers to the target folder (where the file is generated)

the problem is i don't know where i can correctly put the sourc driver in !!

for now i put the source driver in in the project foldr and i refrance it in my code lik

            // 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");

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


Solution

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

    • Application Properties

      Application settings enable you to store application information dynamically. Settings allow you to store information on the client computer that should not be included in the application code.

      Ex: Position, Font, Styles, User Configuration
      File Type: App.Config(Is created at design time and is by default put into BIN folder) and User.Config (Created at run time)
      Project > Add New Item > Installed > Visual C# Items > Application Configuration File


    • Application Data

      Contains all the data, settings, and user files that are required by the installed software and UWP apps. These are user agnostic data.

      Ex: Images, Resources, Sprites, Data Templates, txt files. It may also contain App.Config files

      File Location: C:\ProgramData Environment.SpecialFolder.CommonAppData


    • User Data

      Contain all data that is user specifc, such as his/her app specific settings.

      Ex: Any type of data

      File Location: C:\Users\[USERNAME]\AppData\Roaming Environment.SpecialFolder.AppData or Environment.SpecialFolder.MyDocuments


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

    yes, it will go to ProgramData, but during the development you can have it in your BIN folder or a directory of your choice if it matters

    However most of the above will come into picture when you package your App to an MSI and bundle in all the dependency files and where they need to go.



    EDIT

    Based on the OPs clarification in comments, .CPP files will automatically go into the BIN/Debug Folder of your C# app.
    You will need to dynamically place your device drives in the directory where your exe is running

    To access the directory where your app is running :

    string exePath = System.Reflection.Assembly.GetExecutingAssembly().Location Output of Path = Absolute path where your exe is running C:\Users\User1\source\repos\Test\Test\bin\Debug\Test.exe

    string exeDirectory = Path.GetDirectoryName(exePath); The Directory path where your exe is situated C:\Users\User1\source\repos\Test\Test\bin\Debug