【问题标题】:How to edit Text file in Resources Folder of Window form c#如何在窗口窗体c#的资源文件夹中编辑文本文件
【发布时间】:2014-01-26 16:12:39
【问题描述】:

我正在尝试编辑包含在窗口窗体项目的资源文件夹中的文本文件。 C#。

我正在使用此代码,但它没有写入文本文件。没有错误来自此

using (System.IO.StreamWriter file = new System.IO.StreamWriter(Namespace.Properties.Resources.textfile))
{
    for (int i = 0; i < res2.Count(); i++)
    {
        label3.Text = "Updating ... ";
        label3.Visible = true;
        label3.Refresh();

        file.WriteLine("asdasD");
    }
    file.Close();
}

【问题讨论】:

  • 你调试了吗?您是否查看了Namespace.Properties.Resources.textfile 这是您要写入的文件的正确路径吗?
  • 是的,我进行了调试。我能够从同一路径读取文本但无法写入。
  • 奇怪。您是否在您的项目中以其他方式使用此文件,以便在您要写入的那一刻使用它?您是否尝试使用相同的代码在此文件中写入,但在此项目关闭时在另一个项目中写入?
  • 是的,我在写作之前确实用这种方法阅读了文本。 string[] 行 =SatakAntivirus.Properties.Resources.virus.ToString().Split('\n');
  • 你的项目文件夹在哪里?

标签: c# .net winforms window


【解决方案1】:

正如@LarsTech 在this answer 中所说,您尝试做的是不推荐。资源文件不应该被写入——它们只能被读取。如果您想要放置文件的地方,请将它们放在 Environment.SpecialFolders 之类的地方。

您还可以使用用户计算机上的AppData 文件夹,该文件夹通常用于您想要实现的目标:

string fileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "textfile.txt");    
using (System.IO.StreamWriter file = new System.IO.StreamWriter(fileName))
{
    //if the file doesn't exist, create it
    if (!File.Exists(fileName))
        File.Create(fileName);

    for (int i = 0; i < res2.Count(); i++)
    {
        label3.Text = "Updating ... ";
        label3.Visible = true;
        label3.Refresh();
        file.WriteLine("asdasD");
    }
}

如您所见,我删除了file.Close(),因为如果您使用using 块,则没有必要。如果您使用实现IDisposable 接口的成员,则可以执行此操作,StreamWriter 就是这样做的。

这应该会为您处理好一切。您不必创建任何文件或担心它们的位置。

【讨论】:

  • 你的意思是我应该创建新文件夹来放置文本数据文件。这样用户在他们的系统中安装我的应用程序后就无法读取该文件。
  • @AmritPal 是的,你可以这样做。或者您可以使用一些预定义的文件夹,例如 AppData 文件夹(我会这样做)。查看更新的答案。
  • 我做的和你说的一样。但是用户仍然可以看到我不想看到这个文件的文件。
  • 我不确定如何(如果可能的话)创建一个用户完全无法访问的文件。这可能是另一个 StackOverflow 问题的好主题。
  • 您可以尝试弄乱文件属性,但即使这样也不会完全隐藏文件。见这篇文章:csharp-examples.net/file-attributes
【解决方案2】:

我可以在控制台应用程序中使用您的代码写入和读取文件。你能运行这段代码(控制台应用程序)并告诉我你是否有任何异常吗?

    static void Main(string[] args)
    {

        string fileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "textfile.txt");
        using (System.IO.StreamWriter file = new System.IO.StreamWriter(fileName))
        {
            //if the file doesn't exist, create it
            if (!File.Exists(fileName))
                File.Create(fileName);

            for (int i = 0; i < 2; i++)
            {
                file.WriteLine("asdas2");
            }
        }

        using(System.IO.StreamReader fr = new StreamReader(fileName))
        {
            Console.WriteLine(fr.ReadToEnd());
        }
    }

注意,如果您尝试追加到现有文件(写入文件末尾并保留现有内容),则需要使用 System.IO.StreamWriter(fileName, true)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多