2012-04-17 3 views
1

나는 만들고 쓰는 파일 이름 목록을 가지고 있습니다. 나는 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 ??? 이것은 말이되지 않습니다. 는 "사용"을 사용하여

+3

코드를 그대로 또는 간략하게 게시 했습니까? –

+3

'File.WriteAllBytes()'를 사용하는 것이 더 간단 할 수 있습니다. 그러나 게시 한 코드에는 아무런 문제가없는 것으로 보입니다. 가능한 한 코드를 간소화하고 여기에 게시 할 수 있습니까? – svick

+3

어디서'파일 이름 '을 얻고 있습니까? LINQ에서? 마지막으로 사용한 값을 캡처하고있는 변수가 없다는 것을 확인하십시오. http://stackoverflow.com/questions/190227/building-a-linq-query-programatically-without-local-variables-tricking-me –

답변

0

시도 :

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

'using '을 사용하면 유용하지만 아무것도 수정하지 않습니다. – svick

0

코드 확인을 보이는 (using 더 나은 대신 .Close이 될 것입니다).

대부분의 경우 데이터

  • 빈 전부 (data.length == 0) 당신이 표시됩니다 파일을 텍스트로 [0,0,0] 같은 것을 작성하는 경우 (표시 할 수있는 텍스트를 나타내지 않는
  • 아무것도 아니야.
0

코드가 내 테스트 환경에서 완벽하게 작동하므로 실제로 무슨 일이 일어나고 있는지 전혀 알 수 없습니다. 실제 파일이 같은 디렉토리에 있습니까? 환경 공동의 보안 문제가 아님 uld가 파일 2와 3에 쓰는 것을 방해합니까?