我有一个我将创建和写入的文件名列表。我有一个foreach循环遍历它们所有类似的东西
void WriteFiles(byte[] data)
{
foreach (string fileName in fileNames)//fileNames is my List<string>
{
FileStream fs = File.Create(fileName)
fs.Write(data, 0, data.Length);
fs.Close();
}
}
假设我的文件列表是1.txt,2.txt和3.txt 奇怪的是,1.txt,2.txt和3.txt都是创建的。但是数据只写入1.txt 3次,而2.txt和3.txt是空的。我在调试器中进行了双重检查,每次循环时fileName都不同。我编写了许多可以读取和写入文件的程序,但我从未遇到过这样的行为。我很困惑。
修改
也许这会更有意义。这是我运行的实际代码,直接从Visual Studio中生成,复制和粘贴。
using System;
using System.Collections.Generic;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static List<string> fileNames = new List<string>();
static void Main()
{
Directory.CreateDirectory("C:\\textfiles");
fileNames.AddRange(new string[] { "1.txt", "2.txt", "3.txt" });
WriteFiles();
}
static void WriteFiles()
{
foreach (string fileName in fileNames)
{
using (StreamWriter sw = new StreamWriter(File.Create("c:\\textfiles\\" + fileName)))
{
sw.Write("This is my text");
}
}
}
}
}
执行此操作后,我现在在文件夹C:\ textfiles中有3个文本文件(1.txt,2.txt,3.txt),之前都没有。
当我在记事本中打开文件时,这就是我所拥有的
1.txt - “这是我的文字这是我的文字这是我的文字”
2.txt - 没有
3.txt - 没有
WTF ???这没有意义。
答案 0 :(得分:0)
尝试使用“使用”:
using (FileStream fs = File.Create( filename ))
{
fs.Write( data, 0, data.Length );
}
答案 1 :(得分:0)
代码看起来不错(using
会更好,而不是.Close
)。
很可能是您的数据
data.length == 0
)答案 2 :(得分:0)
您的代码在我的测试环境中运行良好,所以我不知道那里发生了什么。您要写入的实际文件是否在同一目录中?我得到的是你的环境中的某些安全问题是否会干扰写入文件2和3?