1

我有一个我将要创建和写入的文件名列表。我有一个 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都是空的。我在调试器中进行了双重检查,每次循环时文件名都不同。我编写了许多读取和写入文件的程序,但我从未遇到过这样的行为。我很困惑。

编辑

也许这会更有意义。这是我运行并产生问题的实际代码,直接从 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 - 没有

怎么回事???这没有意义。

4

3 回答 3

0

您的代码在我的测试环境中完美运行,所以我不知道那里发生了什么。您要写入的实际文件是否在同一目录中?我的意思是,您的环境中的某些安全问题是否会干扰对文件 2 和 3 的写入?

于 2012-04-17T02:30:47.273 回答
0

尝试使用“使用”:

using (FileStream fs = File.Create( filename ))
{
    fs.Write( data, 0, data.Length );
}
于 2012-04-17T01:21:37.867 回答
0

代码看起来不错(using而不是更好.Close)。

很可能是您的数据

  • 完全为空(data.length == 0
  • 不代表可以显示的文本(如果您将 [0,0,0] 之类的内容写入文本文件,它将不显示任何内容。
于 2012-04-17T01:52:36.577 回答