繁体   English   中英

FileStreams的奇怪行为

[英]Strange behavior with FileStreams

我有一个要创建和写入的文件名列表。 我有一个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 ??? 这没有道理。

尝试使用“使用”:

using (FileStream fs = File.Create( filename ))
{
    fs.Write( data, 0, data.Length );
}

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

您的资料极有可能

  • 完全为空( data.length == 0
  • 不代表可以显示的文本(如果在文本文件中写入[0,0,0]之类的内容,则不会显示任何内容。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM