2010-11-19 7 views
1

텍스트 파일 데이터를 저장할 수없는 희귀 한 문제인 것 같습니다 strpath = "c : \ path \ 1234 \ abcd.txt";C에서 텍스트 파일 데이터를 저장할 수 없습니다 #

여기 파일이 생성 중이지만 파일에있는 데이터가 저장되지 않습니다.

내가 바이트 (B) 길이로 확인하는 경우는 121

public int SaveFile(byte[] b,string lstrpath) 
     { 
FileStream fs = new FileStream(strpath,FileMode.Create); 
       fs.Write(b,0,b.Length); 
       fs.Close(); 
       if(File.Exists(strpath)) 
       { 
        return 1; 
       } 
       else 
       { 
        return 0; 
       } 
} 

내가 잘못 여기려고하고있는 일이 쇼인가?

+1

글쎄 * * 일어나고있는 건가요? 나중에 파일에 무엇이 들어 있습니까? –

답변

1

스트림을 처분하거나 플러시하지 않습니다. 예외가 발생하면 프로그램에서 파일 핸들이 누출됩니다. 대신이 시도 :

가 이미 BCL에 내장으로 지금의 종류의 SaveFile 방법의 목적을 패배
public void SaveFile(byte[] b,string lstrpath) 
{ 
    File.WriteAllBytes(lstrpath, b); 
} 

.

0

닫기 전에 플러시()를 수행하십시오. 그것은 fs.Flush()입니다.

+0

닫으면 어쨌든 플러시됩니다. –

0

몇 가지 일 수 있습니까? 파일이 이미 존재하는지 확인하지 않습니다. 디렉토리가 있는지 여부는 확인하지 않습니다. 파일 시스템 사용 권한을 확인하지 않습니다. 그 중 하나가 실패 할 수 있습니다.

또한 실패라고 말하면 무엇을 의미합니까? 예외가 있습니까? 오류? 0 또는 1을 반환합니까? 조용히 실패합니까? 파일이 비어 있습니까?

여기에도 오류 처리가 필요합니다. 오류가 발생하는 위치와 원하는 정보를 알려주는 두 가지 이점이 있습니다.

0

다른 답변도 모두 유효합니다 (예외 처리, 처리, ...). using 문을 사용하려고 할 수도 있습니다. 나는 Darin Dimitrovs의 대답으로 갈 것이고, 이는 코드를 훨씬 더 간단하고 읽기 쉽게 만든다.

질문 :이 방법을 어떻게 부르시겠습니까? 이 간단한 콘솔 응용 프로그램에서 나를 위해 작동합니다.

class Program 
{ 
    static void Main(string[] args) 
    { 
     var text = "abcd"; 
     var encoding = new UTF8Encoding(); 
     var bytes = encoding.GetBytes(text); 
     SaveFile(bytes, @"D:\test.txt"); 
    } 

    public static int SaveFile(byte[] b, string strpath) 
    { 
     FileStream fs = new FileStream(strpath, FileMode.Create); 
     fs.Write(b, 0, b.Length); 
     fs.Close(); 
     if (File.Exists(strpath)) 
     { 
      return 1; 
     } 
     else 
     { 
      return 0; 
     } 
    } 
} 

알림 나는 똑같은 방법을 사용하고 있습니다. 매번 저를 위해 일하므로 파일이 이미 존재할 수 있습니다. 귀하의 경우 문자열을 전달하지 않았을 수 있습니까? 아마 인코딩에 문제가 있을까요?

관련 문제