나는 만들고 쓰는 파일 이름 목록을 가지고 있습니다. 나는 foreach는 루프의 파일 내 목록 1.TXT, 2.txt라고하자 그들을 통해이FileStream과 이상한 동작
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();
}
}
같은 모든 일을 가고 있고, 3.txt 이상한 것은, 1.TXT, 2입니다. txt 및 3.txt가 모두 만들어집니다. 그러나 데이터는 단지 1.txt에 3 번 쓰여지고 2.txt와 3.txt는 비어 있습니다. 나는 디버거에서 두 번 체크하고, fileName은 반복 할 때마다 다르다. 나는 파일을 읽거나 쓰는 많은 프로그램을 작성했지만, 이와 같은 행동을 한 번도 경험하지 못했습니다. 나는 매우 혼란 스럽다.
수정
아마도이 점이 더 적합 할 것입니다. 이 코드는 Visual Studio에서 직접 복사하여 붙여 넣기하여 실행하고 생성 한 실제 코드입니다. 이전에 존재했던 어느 것도 \ textfiles :
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 3 개 텍스트 파일 (1.TXT, 2.txt, 3.txt)가 있습니다.
여기 메모장에서 파일을 열
내가1.TXT있어 무엇 -
2.txt "이것은 내 textThis 내 textThis 내 텍스트 임"- 아무것도
3.txt - 없음
WTF ??? 이것은 말이되지 않습니다. 는 "사용"을 사용하여
코드를 그대로 또는 간략하게 게시 했습니까? –
'File.WriteAllBytes()'를 사용하는 것이 더 간단 할 수 있습니다. 그러나 게시 한 코드에는 아무런 문제가없는 것으로 보입니다. 가능한 한 코드를 간소화하고 여기에 게시 할 수 있습니까? – svick
어디서'파일 이름 '을 얻고 있습니까? LINQ에서? 마지막으로 사용한 값을 캡처하고있는 변수가 없다는 것을 확인하십시오. http://stackoverflow.com/questions/190227/building-a-linq-query-programatically-without-local-variables-tricking-me –