2016-04-27 88 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将路径分隔符定义为“\”。它也恰好处理“/”的事实并不意味着你应该使用它。 –

相关问题