我有以下代码:
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!");
问题解决了!
答案 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));
}