Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Visual Studio 2012如何为用户访问文本文件资源?_C#_Visual Studio 2012_File Io_Resources_Text Files - Fatal编程技术网

C# Visual Studio 2012如何为用户访问文本文件资源?

C# Visual Studio 2012如何为用户访问文本文件资源?,c#,visual-studio-2012,file-io,resources,text-files,C#,Visual Studio 2012,File Io,Resources,Text Files,我制作了一个程序,用户可以跟踪那里的梦幻足球队。下面的代码来自其中一个表单,允许用户根据特定的规则选择他们的球队。这里的问题不是写入文件,而是从写入的文件中读取 此文件位于我的资源中,它包含用户输入的玩家。问题是,用户必须访问该文本文件,此时,用户是否可以访问或编辑该文件并不重要,这是一个人的个人项目;但是,按照我的设置方式,该程序将仅在我的计算机上运行,因为我将使用的路径是文本文件属性的完整路径 我试过使用properties.Resources.resource,如下所示,最近我试过使用Ap

我制作了一个程序,用户可以跟踪那里的梦幻足球队。下面的代码来自其中一个表单,允许用户根据特定的规则选择他们的球队。这里的问题不是写入文件,而是从写入的文件中读取

此文件位于我的资源中,它包含用户输入的玩家。问题是,用户必须访问该文本文件,此时,用户是否可以访问或编辑该文件并不重要,这是一个人的个人项目;但是,按照我的设置方式,该程序将仅在我的计算机上运行,因为我将使用的路径是文本文件属性的完整路径

我试过使用properties.Resources.resource,如下所示,最近我试过使用Application.StartupPath+“/FantasyFootball.txt”。我还没有尝试过反思,因为我不确定这是否需要反思。我的想法应该是,我发布这个程序,它应该在任何计算机上工作;但是,当我尝试在VisualStudio外部运行它时,出现了一个异常,即找不到AppData文件夹

现在的问题是,当我在VisualStudio中按下“发布”按钮时,实际会发生什么?我得到了安装文件和应用程序文件文件夹以及实际的.application文件,这些文件最终位于app.Publish文件夹的release文件夹中的my bin文件夹中。我还没有经验知道这一切意味着什么,或者如何处理它?有什么建议吗

private void btnShowRoster_Click(object sender, EventArgs e)
    {
        string masterRosterPath = Properties.Resources.FantasyFootball;/*
        this is where the problem is I am not sure what to make the path
        so that the user will be able to acess the file*/

 FileStream fs = new FileStream(masterRosterPath, FileMode.Open, FileAccess.Read);
        StreamReader sr = new StreamReader(fs);
        string playerIn;
        string[] fields;
        playerIn = sr.ReadLine();
        const char DELIM = ',';
        string player = " ";

        while (playerIn != null)
        {
            fields = playerIn.Split(DELIM);
            player = Convert.ToString(fields[0]);

            lbRoster.Items.Add(player);
            playerIn = sr.ReadLine();
        }
        sr.Close();
        fs.Close();
        btnShowRoster.Enabled = false;
        MessageBox.Show("Click on a player to add them to your team", "Choose Team", MessageBoxButtons.OK,MessageBoxIcon.Information);
    }

根据我从您的问题中收集到的信息,您正在尝试访问已导入到项目资源文件夹中的文件

如果我理解正确,那么通过访问文件资源
FantasyFootball
返回的字符串实际上是文本文件的内容,而不是指向它的路径。因此,您可以直接使用其内容!不需要文件阅读器。当您发布应用程序时,它将随应用程序一起分发

执行以下操作时,资源的内容已加载到字符串中:

string masterRosterPath = Properties.Resources.FantasyFootball;
然后可以直接开始解析
masterRosterPath


就这个问题展开讨论 如果您决定使用资源来包含用户的数据,您应该注意,这样的资源文件将不允许您通过代码动态修改其内容

例如,如果这是您的目标,您可以在加载文件(如果不存在)之前,或者在用户第一次运行应用程序时,在磁盘上以预定路径手动创建一个文件(如在可执行文件旁边,或单独的文件夹旁边,或完全在其他位置)。然后,您可以随意加载文件、编辑其内容并保存它。请注意,文件的内容在应用程序之外是可编辑的

也许这是您正在寻找的,而不是资源,但是您可以使用用户设置来保存该路径,而不是对其进行硬编码。您可以随意编辑这些路径,运行应用程序的计算机的每个用户都可以有不同的路径值

<>如果你只有几个字段保存一个玩家,你甚至可以考虑完全设置它们。这将使它们易于管理和访问。您还应该注意,这些设置也可以在应用程序之外进行编辑,因为它们会自动保存为XML文件,隐藏在AppData文件夹中。应用程序启动时,将为正确的用户加载设置

如果这听起来很有趣,请看一下MSDN


希望这是有帮助的

好的,如果我理解正确,使用masterPath=properties.resources.FantasyFootballTracker访问文件将不允许用户对文件进行更改。相反,我必须在项目外部创建这些文本文件,或者使用应用程序设置?我尝试使用Application.StartupPath+“/FantasyFootball.txt”来获取文件的路径,但是每次我在发布应用程序后运行应用程序时,都会出现一个异常,它找不到AppData文件夹,因此我不确定此时应该做什么,或者我在寻找什么?它找不到AppData文件夹本身,或者你提供的路径?这样安装时不会自动创建文件。System.IO.FileNotFoundException:找不到文件“C:\Users\user\AppData\Local\Apps\2.0\VWN40HAL.LPQ\B5YGWCN3.4JC\fant..tion_3460b927da4ef279_0001.0000_3396c544ffe1d0e3\FantasyFootball.txt”。文件名:“C:\Users\user\AppData\Local\Apps\2.0\VWN40HAL.LPQ\B5YGWCN3.4JC\fant..tion_3460b927da4ef279_0001.0000_3396c544ffe1d0e3\FantasyFootball.txt”这是在发布应用程序后运行安装文件时生成的异常,用户可以替换为任何个人文件夹的名称,但这是它正在查找的位置因为我的文件不在那里,所以我不确定该做什么这就是我的意思。与资源不同,文件不是自动创建的。在尝试读取之前,您需要检查它是否存在,如果不存在,则首先创建它。