运行此代码时不会创建文件

时间:2012-03-01 06:28:27

标签: c# winforms file

我有以下代码:

List<String> suma = new List<String>();
if (File.Exists(Application.StartupPath + "/totalsold" + username))
     suma = new List<String>(File.ReadAllLines(Application.StartupPath + "/totalsold" + username));
List<String> actual = new List<String>();
if (File.Exists(Application.StartupPath + "/totalsold" + username))
   actual = new List<String>(File.ReadAllLines(Application.StartupPath + "/soldproducts" + username));
List<String> sumatotal = new List<String>();
if (File.Exists(Application.StartupPath + "/totalsoldadmin"))
    sumatotal = new List<String>(File.ReadAllLines(Application.StartupPath + "/totalsoldadmin"));      
 StreamWriter vanzare = new StreamWriter(Application.StartupPath + "/soldproducts" + username);
 StreamWriter total = new StreamWriter(Application.StartupPath + "/totalsold" + username);
 StreamWriter totall = new StreamWriter(Application.StartupPath + "/totalsoldadmin");   

为什么在执行以下代码后才会创建文件vanzare,total和totall?

 vanzare.WriteLine("Hello World");
 total.WriteLine("Helle World again!");
 totall.WriteLine("Hello World again and again!");

问题解决了!

2 个答案:

答案 0 :(得分:0)

你关闭文件了吗?写入文件可能不会立即发生,因为.NET和操作系统可能都在缓存并因此延迟写入。但是,当您打开StreamWriter时,该文件应立即显示。

对于文件的短期使用(例如写入内容然后关闭它),您一定要使用using语句:

using (StreamWriter vanzare = new StreamWriter(...)) {
   vanzare.WriteLine("Hello World");
}

这将确保在之后立即正确关闭文件,并且不会将任何非托管资源留在比需要更长的时间。

如果您需要将文件保持打开的时间超过单个方法,那么当然您必须手动执行此操作。确保当您不再需要StreamWriter(和其他IDisposable s)时,请在其上调用Dispose()方法。

答案 1 :(得分:0)

您正在使用斜杠作为文件路径,这可能不起作用,具体取决于您使用的平台。

使用Path.Combine方法连接路径和文件名,它将使用对文件系统正确的路径分隔符:

string sold = Path.Combine(Application.StartupPath, "totalsold" + username);
if (File.Exists(sold)) {
  suma = new List<String>(File.ReadAllLines(sold));
}