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 は空です。デバッガーでダブルチェックしましたが、ループするたびに 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 - 何もない

なんだ???これは意味がありません。

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 に答える