C# 将字符串[]转换为常规字符串

C# 将字符串[]转换为常规字符串,c#,C#,我试图让用户选择一个路径,程序稍后将使用该路径,我希望将其写入文件的原因可能有点无关紧要,但我认为这是我处理希望用户随时通过GUI更改路径的最简单方法。我正在尝试将我认为是一个字符串数组转换为普通字符串以用于File.Writealltext,但我没有这样做 我使用的代码如下: string[] selecteddir = Directory.GetDirectories(folderBrowserDialog1.SelectedPath).ToString(); File.WriteAllTe

我试图让用户选择一个路径,程序稍后将使用该路径,我希望将其写入文件的原因可能有点无关紧要,但我认为这是我处理希望用户随时通过GUI更改路径的最简单方法。我正在尝试将我认为是一个字符串数组转换为普通字符串以用于File.Writealltext,但我没有这样做

我使用的代码如下:

string[] selecteddir = Directory.GetDirectories(folderBrowserDialog1.SelectedPath).ToString();
File.WriteAllText(@"/Data/storagedir.cfg", insertstringhere);
整个代码链(表单加载)如下所示

private void savelocation_Load(object sender, EventArgs e)
{
    DialogResult result = folderBrowserDialog1.ShowDialog();

    if (result == DialogResult.OK)
    {
        string[] selecteddir = Directory.GetDirectories(folderBrowserDialog1.SelectedPath).ToString();
        File.WriteAllText(@"/Data/storagedir.cfg", insertstringhere);
    }
    else
    {
        MessageBox.Show("Something went wrong");
    }
}
错误如下:

CS0029“无法将类型'string'隐式转换为'string[]”


这就是更正:

        string selecteddir = Directory.GetDirectories(folderBrowserDialog1.SelectedPath).ToString();
        File.WriteAllText(selecteddir + @"\Data\storagedir.cfg", insertstringhere);
  • ToString()不返回任何字符串,只返回一个简单的字符串
  • 使用完整路径或/在路径中。这是你需要的害羞的“选择的空气”,对吗
  • 使用“@”属性可以使用普通“\”
  • 确保“数据”文件夹存在。当用户在对话框中选择“数据”文件夹时,您将做什么?保存到“…\Data”+@“\Data\storagedir.cfg”:)恐怕“数据”文件夹中的“数据”文件夹太多

  • 要将所有目录名称写入
    storagedir.cfg
    中,您可以使用:

    它将数组作为第二个参数

    或使用


    如果您试图将所选路径保存到
    storagedir.cfg

    File.WriteAllText(@"/Data/storagedir.cfg", olderBrowserDialog1.SelectedPath)
    

    要准确了解您想要实现的目标并不难,但您的问题是,您将获得一个包含
    Directory.GetDirectories(folderBrowserDialog1.SelectedPath)
    的子目录列表,然后调用
    .ToString()
    。这是你的错误

    也许您不需要存储目录数组,只需要存储用户选择的目录。如果是这种情况,那么您可以完全省略该行,然后将所选目录存储在配置中

    因此:

    File.WriteAllText(@"/Data/storagedir.cfg", insertstringhere);
    
    变成这样:

    File.WriteAllText(@"/Data/storagedir.cfg", folderBrowserDialog1.SelectedPath);
    
    然后,当您需要配置目录列表时,您可以从配置中读取该设置,并获得目录数组,如:

    string[] dirs = Directory.GetDirectories(theStringInMyConfig);
    

    您希望如何显示文件中的每个字符串元素?所有元素都在一行上,每个元素之间没有空格?新行上的每个元素?每个元素由一行上的制表符分隔?编辑:如果您希望每个字符串都在自己的行中,那么使用。为什么要在此处调用
    ToString()
    <代码>目录.GetDirectory(folderBrowserDialog1.SelectedPath).ToString()?你的意图是什么?@Darren我不知道你必须阅读所有的.NET文档才能理解其中的任何内容。谢谢你的澄清。@Darren我是想帮忙的。如果OP真的想保住一份工作,他很难期望在每次他的代码没有编译或者某个函数没有按他期望的那样运行时,都能及时完成任务,他直接去做,而不是使用google。严厉的爱是我在学生时代得到的最好的建议之一。我建议不要用这种行为来溺爱用户,因为有一天你可能会不幸地不得不和他们一起工作。你并不是想帮忙。你很快就抛出了一个标准的反驳,你已经看到了这么多。强悍的爱情是美好的,只要你至少在某个地方引导着某人——也许是通过大量手册中的链接。告诉提供代码的人阅读f'kin手册并不是一件难事。如果我们都告诉对方阅读《f'kin手册》,那么这个网站有什么意义呢。1:此代码不可编译,也不正确,2:您在路径上使用字符串串联,而不是非常有效且非常适用的
    路径。组合
    。另外,调用
    ToString()
    将返回
    System.String[]
    而不是路径。@ColinM和OP:注意,如果第二个参数有一个前导斜杠,则
    path.Combine
    将无法正常工作。要处理此字符串,它必须如下所示:
    Path.Combine(selecteddir,@“Data\storagedir.cfg”)
    ,注意我是如何删除
    Data
    Path.Combine前面的斜杠的?你在开玩笑吗?祝Path.Combine调试好运,其他人在watch
    string myPath=System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(),“Data”,“storagedir.cfg”)中只看到局部变量调试中的复杂性在哪里?谢谢,这非常有效。我使用了最后一个:File.writealText(@“/Data/storagedir.cfg”,olderBrowserDialog1.SelectedPath)
    
    File.WriteAllText(@"/Data/storagedir.cfg", folderBrowserDialog1.SelectedPath);
    
    string[] dirs = Directory.GetDirectories(theStringInMyConfig);