2016-04-27 57 views
0

我編寫了這段代碼,它每次都會創建一個名爲「Fitness50」的文件夾,但文本文件不會被創建。此文件夾,然後保存數組列表的值。 所以我已經嘗試了本我必須在bin-debug中創建文件夾,然後在其中創建並寫入文本文件

DirectoryInfo myDir = new DirectoryInfo(@"E:"); 
ParentFolderName1 = "Fittness50"; 
myDir.CreateSubdirectory(ParentFolderName1); 
myDir = new DirectoryInfo(ParentFolderName1); 
ParentFolderName1 = "Fittness50"; 
myDir.CreateSubdirectory(ParentFolderName1); 



FileName1 = "./" + "" + ParentFolderName1 + "" + "/" + "Fittness10" + "" + "" + PopulationID + "" + ".txt"; 

FileStream fs2 = new FileStream(FileName1, FileMode.Create, FileAccess.Write); 
StreamWriter SW2 = new StreamWriter(fs2); 

for (i = 0; i < AlTargetData.Count; i++) 
{ 
     SW2.WriteLine(AlTargetData[i]); 

} 

AlTargetData.Clear(); 

SW2.Close(); 
fs2.Close(); 
+0

「文本文件未創建」,您是否收到任何阻止文件被創建的錯誤? – Zack

+0

檢查'AlTargetData.Count'以確保它不是0.如果你永遠不會進入該循環來調用'SW2.WriteLine(AlTargetData [I]);'然後我不認爲會創建任何文件,但我' m不能100%確定在實例化'StreamWriter'時文件不會被創建。 – Zack

+1

它看起來像是在'E:'上創建一個文件夾,而不是'bin/debug'。而不是組合字符串文件的位置,使用'Path.Combine'。 – DrewJordan

回答

4

嗯,首先,/不是Windows的首選目錄分隔符,但\是。僅僅因爲/恰好工作,沒有理由使用它。其次,你根本沒有創建Fittness10文件夾,但是你創建了兩次Fittness50。第三,您不是將文件寫入您創建的文件夾,而是寫入當前工作目錄.

您的代碼(或至少我瞭解你想要達到)可顯著縮短到這一點:

string path = @"E:\Fittness50\Fittness10"; 
if (!Directory.Exists(path)) 
    Directory.CreateDirectory(path); 

string fileName = Path.Combine(path, String.Format("{0}.txt", PopulationID)); 
File.WriteAllText(fileName, String.Join(Environment.NewLine, AlTargetData)); 

請注意,您應該考慮寫bin\debug。最終用戶的機器上不會有bin\debug。如果用戶安裝您的應用程序,它很可能會安裝在您的應用程序不允許寫入的Program Files文件夾中。相反,請考慮寫入一個公共位置,例如您可以從Environment.GetFolderPath中選擇的位置。

+1

僅供參考,您可以在路徑字符串中使用'/',Windows將會處理它。 – DrewJordan

+0

關於寫入程序文件夾:這取決於。我經常在沒有任何安裝程序的情況下製作小工具,在程序文件夾中使用簡單的ini配置文件。我不期望有人會在Program Files中解壓縮它。儘管如此,對於更大的東西,是的,使用用戶文件夾。 – Nyerguds

+0

你可以,但你爲什麼要? Windows將路徑分隔符定義爲「\」。它也恰好處理「/」的事實並不意味着你應該使用它。 –

相關問題