为什么我的应用程序试图读取错误文件夹中的对象?

时间:2019-06-12 15:58:45

标签: c# visual-studio-2017 directory-structure

我正在使用Visual Studio来完成应用程序的第一个完整版本,该应用程序是一个简单的WPF GUI,用于配置本地保存的JSON对象,以及一个控制台应用程序,该应用程序在后台运行,使用该对象中的数据进行监控一个网站。我将每个项目发布到一个测试文件夹(我们将其称为Publish /),该文件夹现在包含每个应用程序清单,以及一个“ Application Files”文件夹,其中包含每个项目的另一个子文件夹。

我让应用程序正常运行-问题是配置文件将几个级别的文件保存到一个文件夹中,分别位于C:\ Users \ username \ AppData \ Local \ Apps \ 2.0 \中,并且控制台应用程序正在尝试读取从一个完全独立的文件夹中。两个项目都使用GetCurrentDirectory()作为文件路径进行读写。有什么办法可以弥补吗?

用于检索JSON对象的代码

try
        {
            //Confirms file exists
            if (File.Exists(Directory.GetCurrentDirectory().ToString() + filePath))
            {
                //Initialize json variable to a string, then deserialize it into an instance of RCDetails
                var json = File.ReadAllText(Directory.GetCurrentDirectory().ToString() + filePath);
                RCDetails parsedDetails = JsonConvert.DeserializeObject<RCDetails>(json);

                //Return deserialized JSON
                return parsedDetails;
            }
            else return null;

以及用于编写json对象的代码

public void WriteToFile(RCDetails rcd)
    {
        //Serialize input instance of RCDetails class
        string JSONresult = JsonConvert.SerializeObject(rcd, Formatting.Indented);

        //Remove old JSON object
        if (File.Exists(Directory.GetCurrentDirectory().ToString() + jsonFilePath))
            File.Delete(Directory.GetCurrentDirectory().ToString() + jsonFilePath);

        //Create new JSON object with updated details
        File.WriteAllText(Directory.GetCurrentDirectory().ToString() + jsonFilePath, JSONresult);
    }

发布项目的确切步骤:

  • 选择控制台应用程序后,单击“构建”>“发布(控制台应用程序名称)”
  • 浏览到C:\ Users \ username \ Downloads \ Publish \
  • 要进行安装,请选择“从CD-ROM或DVD-ROM”
  • 选择“应用程序将不检查更新
  • 选择完成,然后对WPF配置重复所有具有相同文件路径的步骤

我最终找到了解决方案(请告诉我这是否是一个不好的计划)。我只是将其放入两个应用程序中。

string s = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\IntendedFolder";
        if (!Directory.Exists(s))
            Directory.CreateDirectory(s);
        Directory.SetCurrentDirectory(s);

0 个答案:

没有答案