2016-11-28 99 views
3

我想讓用戶選擇一個路徑,該程序稍後將使用,之所以我希望它將其寫入文件,可能有點不相關,但可能會有點不相關我認爲這是讓我自己處理用戶希望在任何時候通過GUI改變它的最簡單方法。我想我認爲是一個字符串數組轉換爲一個正常的字符串用於File.Writealltext,但我沒有這樣做。將字符串[]轉換爲常規字符串

我使用的代碼如下:

string[] selecteddir = Directory.GetDirectories(folderBrowserDialog1.SelectedPath).ToString(); 
File.WriteAllText(@"/Data/storagedir.cfg", insertstringhere); 

代碼(形式負載)的全部STRECH如下。

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 「無法隱式轉換類型 '字符串' 到 '字符串[]'」

+0

你想如何顯示文件中的每個字符串元素?所有在一行中每個元素之間沒有空格?新行上的每個元素?每個元素由一行中的製表符分隔?編輯:如果你想每個字符串在自己的行然後使用['File.WriteAllLines(string filename,string [] outputLines)'](https://msdn.microsoft.com/en-us/library/92e05ft3(v = vs.110)的.aspx)。 – Quantic

+2

你爲什麼在這裏調用'ToString()'? 'Directory.GetDirectories(folderBrowserDialog1.SelectedPath)的ToString()'?你的意圖是什麼? –

+4

@Darren我不知道你必須閱讀所有的.NET文檔來理解它。感謝您的澄清。 –

回答

6

爲了寫出所有的目錄名稱爲storagedir.cfg可以使用WriteAllLines

string[] selecteddir = Directory.GetDirectories(folderBrowserDialog1.SelectedPath); 
File.WriteAllLines(@"/Data/storagedir.cfg", selecteddir); 
      ^^^^^ 

這需要一個數組作爲第二個參數。

或者使用String.Join

string[] selecteddir = Directory.GetDirectories(folderBrowserDialog1.SelectedPath); 
File.WriteAllText(@"/Data/storagedir.cfg", String.Join(", ", selecteddir); 

如果你想保存所選路徑storagedir.cfg

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

謝謝,這工作完美。我使用了最後一個: File.WriteAllText(@「/ Data/storagedir.cfg」,olderBrowserDialog1.SelectedPath) – marceltje

-1

即更正:

 string selecteddir = Directory.GetDirectories(folderBrowserDialog1.SelectedPath).ToString(); 
     File.WriteAllText(selecteddir + @"\Data\storagedir.cfg", insertstringhere); 
  1. ToString()din't return ara y字符串,只是簡單的一個字符串。
  2. 使用完整路徑或./在路徑中。多數民衆贊成在害羞「selecteddir」你需要,對吧?
  3. 以「@」的屬性,你可以用一個正常的「\」
  4. 保證,那是一個「數據」文件夾是存在的。當用戶在對話框中選擇「數據」文件夾時,你會做什麼?保存到 「... \數據」 + @ 「\ DATA \ storagedir.cfg」 :) Affraid這將是裏面的 「數據」 文件夾中太多的 「數據」 文件夾
+0

Downvoted出於兩個原因1:此代碼不可編譯也不正確,2:您在路徑上使用字符串連接而不是非常有效和非常適用的路徑。 Combine'。此外,調用'ToString()'將返回'System.String []'而不是一條路徑。 – ColinM

+1

@ColinM和OP:要小心如果第二個參數有一個前導,Path.Combine不會按預期工作因爲它在這個字符串上工作,它必須看起來像這樣:'Path.Combine(selecteddir,@「Data \ storagedir.cfg」)',注意我如何去掉' Data'。 – Quantic

+0

Path.Combine?你在開玩笑嗎?Path.Combine調試的好運氣,當其他人只是看到當地人在 –

0

有點難以辨認出你想實現什麼,儘管你的問題是你得到了一個Directory.GetDirectories(folderBrowserDialog1.SelectedPath)的子目錄列表,但其後調用.ToString()就可以了。這是拋出你的錯誤。

也許您不需要存儲目錄數組,而只需要存儲用戶選擇的目錄。如果是這種情況,那麼您可以完全省略該行,然後將所選目錄存儲在您的配置中。

所以這樣的:

File.WriteAllText(@"/Data/storagedir.cfg", insertstringhere); 

變爲這樣:

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

後來的後來,當你需要你的配置目錄的列表,你可以閱讀你的配置該設置並獲得目錄的數組如:

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