2009-07-27 3 views
1

동적으로 생성 된 .NET Chart 컨트롤에서 여러 PNG 이미지 파일을 생성하는 작은 C# ASP.NET 웹 응용 프로그램이 있습니다. 이들은 다음에 사용됩니다파일에 대한 잠금 ASP.NET에서 파일 덮어 쓰기 방지

  • 이 만들기 Zip 파일
를 PDF 파일
  • 을 라이트 박스 효과
  • 만들기

    응용 프로그램은 거의 사용을 가져 와서 데이터는 자주 업데이트됩니다, 그래서 ' 각로드마다 모든 것을 다시 생성합니다. 문제는 파일이 종종 "사용 중"이고 덮어 쓸 때 예외가 발생한다는 것입니다. 이전 버전이 아닌 새로운 버전의 차트를 표시해야하기 때문에 예외를 가질 수 없습니다. 나는 먼저 삭제할 생각을했으나 여전히 문제가있다. 페이지가 매번 "제대로 작동"해야하기 때문에 매번 데이터를 새로 고친 후 수동으로 이미지 파일을 삭제해야했지만 어리석은 짓입니다. 나는 이런 일이 :

    if(!System.IO.File.Exists(Server.MapPath(ImageFilename))) { 
        chart.SaveImage(Server.MapPath(imageFilename), ChartImageFormat.Png); 
    } 
    

    을 그리고 PDF를 들어, 내가 알고있는이 같은이 총입니다 :

    try 
    { 
        Document doc = new Document(); 
        System.IO.File.Delete(Server.MapPath("charts.pdf")); 
        PdfWriter.GetInstance(doc, new FileStream(Server.MapPath("charts.pdf"), FileMode.Create)); 
        doc.Open(); 
        ///ADD DATA 
        doc.Close(); 
    } 
    catch(Exception exc) 
    {} 
    

    가 어떻게 파일 문제를 해결하기 수 및 수동 대신 덮어 쓰기를 강제로 또는 삼키기 예외가있는 자동 삭제? 나는 항상 Explorer에서 잘 삭제할 수 있습니다. 또는 대안으로, 나는 이것을 잘못된 방법으로 생각하고 다른 압정을 시도해야합니까?

  • 답변

    3

    또한 파일을 읽는 코드를보고 파일을 사용 중이 지 않은 오류가 발생해야합니다.

    파일을 잠근 상태로 여는 중입니까? 파일이 필요 이상으로 오래 열려 있습니까? 오류로 인해 파일이 열리게되는 코드가 있습니까?

    FileMode.Create는 파일이 이미 있으면 삭제해야합니다.

    +1

    파일 액세스는 관리되지 않는 리소스를 다루는 작업 중 하나입니다. 작업을 마친 후 Dispose를 호출해야합니다. –

    +0

    @Zhaph - 감사합니다. 나를 위해 해냈어. 비트 맵 객체를 'using'절 외부에 열었습니다. – kervin

    0

    아마도 파일 이름에 날짜 시간이 추가 된 다른 이름으로 새 파일을 만드는 것이 어떻습니까? 또한 배치 파일이나 Windows 서비스를 만들어 이전 파일을 자동으로 삭제하십시오.

    0

    최근에 고급 Windows 파일 캐싱을 사용하는 경우에도 리소스를 버전을 지정하지 않은 경우에 대비하여 (파일을 삭제하려고 시도하는) 코드가 IIS를 겹치기 위해 (캐시/동일한 파일을 제공하려고 시도하는) , 여러 번 회전하여 다시 시도 할 수는 있지만 구현하기가 쉽지 않고 자원 크기에 따라 달라집니다. 최선의 구현은 버전 관리 + 백그라운드 정리 일 것입니다.

    관련 문제