C# 如何在窗体c的资源文件夹中编辑文本文件

C# 如何在窗体c的资源文件夹中编辑文本文件,c#,.net,winforms,window,C#,.net,Winforms,Window,我正在尝试编辑一个文本文件,它包含在窗口窗体项目的resources文件夹中。C 我正在使用这段代码,但它不是写在文本文件上。没有错误来自于此 using (System.IO.StreamWriter file = new System.IO.StreamWriter(Namespace.Properties.Resources.textfile)) { for (int i = 0; i < res2.Count(); i++) { label3.Tex

我正在尝试编辑一个文本文件,它包含在窗口窗体项目的resources文件夹中。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();
}
正如@LarsTech在中所述,不推荐您尝试执行的操作。资源文件不应写入,而应仅从中读取。如果您想要一个放置文件的地方,请将它们放置在类似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");
    }
}
如您所见,我删除了文件.Close,因为如果您使用的是using块,则不需要它。如果您使用的是实现接口的成员(StreamWriter就是这样做的),则可以执行此操作

这会帮你解决一切的。您不必创建任何文件或担心它们在哪里。

正如@LarsTech在中所述,不建议您尝试执行的操作。资源文件不应写入,而应仅从中读取。如果您想要一个放置文件的地方,请将它们放置在类似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");
    }
}
如您所见,我删除了文件.Close,因为如果您使用的是using块,则不需要它。如果您使用的是实现接口的成员(StreamWriter就是这样做的),则可以执行此操作


这会帮你解决一切的。您不必创建任何文件或担心它们在哪里。

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

    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.StreamWriterfileName,true。

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

    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.StreamWriterfileName,true。

是否调试了它?您是否查看了Namespace.Properties.Resources.textfile这是您要写入的文件的正确路径?是的,我进行了调试。我能读同一路径的文字,但不能写。奇怪。您是否在项目中使用此文件,或者以其他方式使用,以便在您想要写入的时刻使用它?您是否尝试使用相同的代码写入此文件,但在其他项目中,此项目已关闭?是的,在写入之前,我确实使用此方法阅读了文本。string[]line=SatakAntivirus.Properties.Resources.virus.ToString.Split'\n';你的项目文件夹在哪里?你调试过吗?您是否查看了Namespace.Properties.Resources.textfile这是您要写入的文件的正确路径?是的,我进行了调试。我能读同一路径的文字,但不能写。奇怪。您是否在项目中使用此文件,或者以其他方式使用,以便在您想要写入的时刻使用它?您是否尝试使用相同的代码写入此文件,但在其他项目中,此项目已关闭?是的,在写入之前,我确实使用此方法阅读了文本。string[]line=SatakAntivirus.Properties.Resources.virus.ToString.Split'\n';你的项目文件夹在哪里?你的意思是我应该创建一个新文件夹来放置他们的文本数据文件。所以用户在系统中安装我的应用程序后无法读取该文件。@AmritPal是的,您可以这样做。或者你可以使用一些预定义的文件夹,比如AppData文件夹,这就是我要做的。请看更新的答案。我正在按照你说的做。但用户仍然可以看到我想要的文件。我不确定如何创建用户完全无法访问的文件。对于另一个StackOverflow问题,这可能是一个很好的主题。您可以尝试混淆文件属性,但即使这样也不会完全隐藏文件。看这篇文章:你的意思是我应该创建一个新的文件夹来放置他们的文本数据文件。所以用户在系统中安装我的应用程序后无法读取该文件。@AmritPal是的,您可以这样做。或者你可以使用一些预定义的文件夹,比如AppData文件夹,这就是我要做的。请看更新的答案。我正在按照你说的做。但用户仍然可以看到我想要的文件。我不确定如何创建用户完全无法访问的文件。对于另一个StackOverflow问题,这可能是一个很好的主题。您可以尝试混淆文件属性,但即使这样也不会完全隐藏文件。见本文: