2009-07-20 4 views
0

StreamWriter 개체를 사용하여 생성자에 의해 생성되거나 이미 존재하는 파일에 쓸 수 있습니다. 파일이 있으면 데이터를 추가합니다. 그렇지 않으면 파일을 생성 한 다음 데이터를 추가해야합니다. 문제는 파일을 만들어야 할 때 StreamWriter 생성자가 파일을 만들지 만 파일에 데이터를 쓰지는 않는다는 것입니다.StreamWriter - 생성 된 파일에 추가하지 않음

bool fileExists = File.Exists(filePath); 

using (StreamWriter writer = new StreamWriter(filePath, true)) 
{ 
    if (!fileExists) 
    { 
     writer.WriteLine("start"); 
    } 

    writer.WriteLine("data"); 
} 

편집 : 답변 감사합니다. using 블록은 writer를 닫는 것을 처리한다. 다른 사람들이 그들에게 효과가 있다고 말하면, 문제를 더 진단하기 위해 당신에게 줄 수있는 정보가 있습니까? 파일은 네트워크를 통해 지역화됩니다. 그게 잠재적 인 문제가 될 수 있습니다. 간헐적으로 "경로의 일부를 찾을 수 없습니다 ..."및 "지정한 네트워크 이름을 더 이상 사용할 수 없습니다."라는 오류가 나타납니다. 당신이 액세스 파일을 시도하지 않는 것이, 그 어떤 이유로 당신이 그것을 쓸 수 없습니다

 
start 
data 
data 
data 

당신에게 확신 :

+0

나를 위해 일합니다. - – weiqure

+0

코드가 내 컴퓨터에서 완벽하게 작동합니다. –

+0

나를 위해 일해도 ... @ 단, 다시 시도하고 확인하십시오. 어쩌면 처음 실행했을 때 뭔가 놓친 것일까 요? using 문은 닫고 플러시를 처리해야합니다 ... –

답변

1

좋아을, 그래서 나는 그것을 알아. 내 로컬 컴퓨터가 네트워크를 통해 파일에 간헐적으로 액세스하는 데 문제가있었습니다. 서버에 코드를 업로드하고 문제없이 실행했습니다. 나는 모든 도움에 정말로 감사한다. 해결책이별로 흥미롭지 않아서 유감입니다.

0

코드는 제가했습니다 3 개 실행 한 후, 나를 위해 작동? 또한 Dispose()이 데이터를 플러시해야 함에도 불구하고 처분하기 전에 writer.Close()을 배치하십시오. 이 방법이 도움이되지 않으면 적절한 플래그와 함께 File.Create()을 사용하여 파일을 수동으로 만들어보십시오. // 편집

: 나는 내 컴퓨터에서이 코드를 시도했다 :

 
public unsafe static void Main() 
{ 
    string filePath = @"\\COMP-NAME\Documents\foo.txt"; 
    FileStream fs = null; 
    if (!File.Exists(filePath)) 
     fs = File.Create(filePath); 
    else 
     fs = File.Open(filePath, FileMode.Append); 

    using (StreamWriter writer = new StreamWriter(fs)) 
    { 
     writer.WriteLine("data"); 
    } 
} 

그리고이 일을 시도 할 수, 원활하게 실행? 귀하의 코드는 나를 위해 제대로 일

+0

그건 내 첫 반응이었다. 내가 존재하지 않았고 위의 코드를 사용하면 파일을 만들려고했지만 첫 번째 호출에서도이 파일을 작성합니다. 이 방법으로 서버에 파일을 만드는 데 대기 시간 문제가 있습니까? –

+0

편집 섹션에서 네트워크를 통해 작동하는지 확인하기 위해 조리 한 코드를 게시했습니다. 이 시간을 사용하여 100 % 올바른 사용법의 원인이 아닌 프로덕션 코드 btw로 취급하지 마십시오. 그러나 그것은 나를 위해 작동합니다. 파일을 생성 할 때 데이터를 넣은 다음 ID에 추가합니다. –

0

..

using (StreamWriter writer = new StreamWriter(filePath, true)) 
{ 
    if (!fileExists) 
    { 
     writer.WriteLine("start"); 
    } 

    writer.WriteLine("data"); 
    writer.Flush(); 
} 
+2

저자가'using' 문을 사용하고 있습니까? –

+0

샘플 코드를 보면 using 문을 사용하고 있습니까? –

1

코드는 내 컴퓨터에 잘 달린 사용하여 문을보십시오. 변수 filePath에 포함 된 것을 알 수 있습니까? 아마도 잘못된 파일을보고 있었을 것입니다 ...

업데이트 : 네트워크 문제? 어쩌면 누군가가 네트워크의 다른 쪽에서 무언가를하고있을 수도 있습니다. 로컬 파일에 쓰십시오. 작동하는 경우 다른 위치의 원격 파일에 쓰십시오.

+1

string filePath = @ "\\ server \ folder \ filename.htm"; 파일을 만든 후에 이후 호출에서 작동하므로 올바른 경로임을 알 수 있습니다. –

+0

제공 한 간헐적 인 오류 메시지에 따라 서버 자체가 사용 중이거나 오프라인 일 수 있습니다. 또는 폴더 자체가 삭제되었으며 폴더를 만들 수있는 권한이 없거나 폴더를 만들지 않았습니다. 아마도 파일/폴더 사용 권한 문제일까요? –

0

File.Open 기능을 사용해 볼 수 있습니다. FileModes 의 좋은 예가 있습니다. FileMode.Append는 원하는 것입니다.

0

게시 한 다른 사람들과 마찬가지로, 내 PC에서 코드가 올바르게 작동합니다.

당신은 두 부분으로 코드를 중단하는 것이 도움이 될

, 파일이 이미 존재하지 않는 경우, 데이터 쓰기 번째 부분 헤더를 작성하는 첫 번째 부분 :

try 
{ 
    using (FileStream fs = new FileStream(filePath, FileMode.CreateNew)) 
    { 
     using (StreamWriter sw = new StreamWriter(fs)) 
     { 
      sw.WriteLine("start"); 
     } 
    } 
} 
catch (IOException ex) 
{ 
} 

using (StreamWriter writer = new StreamWriter(filePath, true)) 
{ 
    writer.WriteLine("data"); 
} 
관련 문제