【问题标题】:Where to put txt file in VS 2019VS 2019 txt 文件放在哪里
【发布时间】:2021-01-11 14:48:51
【问题描述】:

我在 VS 2019 中有一个 c# 脚本,现在我想将值写入文件,但我必须将 .txt 文件放在哪里?之后我想用 Inno Setup Compiler 制作一个 Setup.exe。

所以我的问题是,在我的 Programm 编程期间以及从 Setup.exe 安装 .exe 之后,我应该将文件放在哪里才能访问它。

我听说过这件事,但我不知道这是做什么的:

string filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "combinations.txt");

现在我在函数顶部设置权限,因为它提到了here,但我仍然遇到问题

[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
    private void button4_Click(object sender, EventArgs e)
    {
        string date = DateTime.Now.ToString("g");
        string exePath = Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
        string logFile = "combinations.txt";

        if (File.Exists(Path.Combine(exePath, logFile)) == false)
            File.Create(Path.Combine(exePath, logFile));

        using (StreamWriter wr = File.AppendText(Path.Combine(exePath, logFile)))
        {
            wr.WriteLine(date + "|" + date);
            wr.Close();
        }
    }

感谢您的帮助

【问题讨论】:

标签: c# visual-studio inno-setup


【解决方案1】:

我认为您可以正确使用此路径 它位于您的 exe 运行的文件夹中。

例如 exe 文件夹中的写入日志文件。 在调试模式下,它在调试文件夹中。

public static void LogWrite(string mes)
        {
            string exepath= Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location); 
            DateTime _dt = DateTime.Now;
            string logFile= "Log.Inc";
                  
            if (File.Exists(Path.Combine(exepath, logFile)) == false)
                File.Create(Path.Combine(exepath, logFile));

            using (StreamWriter wr = File.AppendText(Path.Combine(exepath, logFile)))
            {
                wr.WriteLine(_dt.ToString("dd/MM/yyyy") + "|" + _dt.ToString("hh:mm") + "|" + mes);
                wr.Close();
            }
        }

【讨论】:

  • 通常将文件写入exe所在的同一文件夹中,调试时效果很好,部署时失败。该文件夹需要具有正确的权限,而某些预定义文件夹(例如“Program Files”)则不是这种情况
  • 非常感谢它的工作,但我必须在 Inno Setup Complier 中添加这个文件吗?还是在.exe中自动添加?
  • 我喜欢你的情况;我之前没有尝试过,但是找到了一个关于它的主题也没有尝试解决方案。看看stackoverflow.com/a/39382987/8970570
  • @mcbabo 在您的情况下,如果安装后它在您的 exe 路径中不存在,它将自行创建。但史蒂夫的情况;我给出的方法可能会导致权限错误。
  • System.UnauthorizedAccessException:对路径“C:\Program Files (x86)\Lotto\combinations.txt”的访问被拒绝。仍然得到错误
【解决方案2】:

根据我的测试,你可以试试下面的代码,在你发布信息后将信息记录到txt文件中。

private void button1_Click(object sender, EventArgs e)
        {
            string date = DateTime.Now.ToString("g");
            string exePath = Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
            string logFile = "combinations.txt";

            using (StreamWriter wr = new StreamWriter(Path.Combine(exePath, logFile), true))
            {
                wr.WriteLine(date + "|" + date);
                wr.Close();
            }
            string path = Path.Combine(exePath, logFile);
            MessageBox.Show(path);
        }

如果您使用上面的代码,则无需检查文件是否已创建。 另外,我在最终代码中显示了txt文件的路径。

【讨论】:

  • 在 Vs 调试中它工作正常,但是在我用 Inno 编译它之后我得到这个错误:System.UnauthorizedAccessException: Access to the path "C:\Program Files (x86)\My Program\combinations. txt”被拒绝。
  • @mcbabo,你试过我的代码了吗?因为我没有遇到你提到的例外。我的路径是'C:\Users\username\AppData\Local\Apps\2.0\TK36Y70O.P6H\DEQ0P9YH.GOD\test..tion_37468889c7e228bf_0001.0000_367029bb9a351021\combinations.txt'。你可以再检查一遍。顺便说一下,我用visual studio发布程序。
  • 当我运行 .exe 时它运行良好,但是当我执行安装程序并从安装程序运行 .exe 时出现错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-20
  • 1970-01-01
  • 2018-06-05
  • 2011-01-07
相关资源
最近更新 更多