我有一个要创建和写入的文件名列表。我有一个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都是创建的。但是数据只写了3次到1.txt,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 - "This is my textThis is my textThis is my text“
2.txt -无
3.txt -无
他妈的??这没有任何意义。
发布于 2012-04-17 09:21:38
尝试使用" using ":
using (FileStream fs = File.Create( filename ))
{
fs.Write( data, 0, data.Length );
}发布于 2012-04-17 09:52:37
代码看起来没问题(using比.Close更好)。
最有可能是你的数据
(data.length == 0)
发布于 2012-04-17 10:30:47
您的代码在我的测试环境中工作得很好,所以我不知道发生了什么。您正在写入的实际文件是否在同一目录中?我想说的是,您的环境中是否存在一些安全问题,是否会干扰向文件2和文件3的写入?
https://stackoverflow.com/questions/10183540
复制相似问题