2017-09-19 1 views
-2

누군가가 여기 있으면 나를 도울 수 있습니다. StackOverflow에 대한 다른 많은 비슷한 질문을 읽었지만 저에게 맞는 답변을 찾지 못했습니다 ...'GDI +에서 일반 오류가 발생했습니다.' 어디서든 환경에 이미지를 저장할 수 있습니다. Environment.GetFolderPath (Environment.SpecialFolder.DesktopDirectory)

데이터를 Excel 보고서로 내보내는 코드가 있습니다. 이 코드의 일부는 이미지를 복사하여 데스크탑에 방금 생성 한 폴더에 저장합니다. 그런 다음 해당 이미지를 Excel 보고서에 삽입합니다. 데이터를 내보내는 두 가지 방법이 있습니다. 사용자는 한 번에 하나의 항목 또는 항목의 전체 프로그램을 내보낼 수 있습니다. 한 항목을 내보낼 때 ItemID를 사용하여 바탕 화면에 폴더가 만들어지며 이미지가 해당 폴더에 저장됩니다. 프로그램을 내보낼 때 폴더는 프로그램의 데스크톱에서 크레이 팅되고 다른 폴더는 공급 업체의 폴더 안에 생성되며 공급 업체 내부의 항목에는 생성됩니다. 그런 다음 해당 항목 폴더에 이미지가 저장됩니다. 코드는

일반 오류는 프로그램을 내보낼 때 저장 첫 번째 이미지에 ... GDI +

에서 발생 ... 만 항목을 내보낼 때 잘 작동하지만 오류가 있습니다. 하나 개의 항목은 내보낼 때

코드

Dim SaveFold As String = IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), ProgName, VendName) 
    My.Computer.FileSystem.CreateDirectory(SaveFold) 
    For Each RFQRow As DataRow In DS.RFQRequestForm.Rows() 
     Rprt_ItemRFQ_Class.ExportRFQ(RFQRow.Item("ItemID"), RFQRow.Item("ItmKey"), SaveFold, ProgKey) 

    Next 

호출되는 코드는 ... 항목의 그룹이 내보내기 ...

Rprt_ItemRFQ_Class.ExportRFQ(Itm_ItemIDCmb.Text, ItmKey, Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), ProgKey) 

코드를 메서드를 호출합니다. ... (SaveFold는 클래스 변수)

Public Shared Sub ExportRFQ(ItemID As String, ItmKey As Integer, StartPath As String, ProgKey As Integer) 

    SaveFold = IO.Path.Combine(StartPath, ItemID) 
    My.Computer.FileSystem.CreateDirectory(SaveFold) 

    "I have cut out all the code for creating and formatting the excel sheet as it is not relevent" 

    ImgLoad(ItmKey, ItemID) 


End Sub 

Public Shared Sub ImgLoad(ItmKey As Integer, ItemID As String) 

    GetPrimImg.Fill(DS.GetPrimImage, ItmKey) 

    Dim FileStr As String = DS.GetPrimImage.Rows(0).Item(0) 
    Dim NewPath As String = IO.Path.Combine(SaveFold, ItemID & ".jpg") 
    Dim fs As IO.FileStream 
    fs = New IO.FileStream(FileStr, IO.FileMode.Open, IO.FileAccess.ReadWrite) 
    Dim RFQImg As System.Drawing.Image = System.Drawing.Image.FromStream(fs) 
    RFQImg.Save(NewPath) 
    Dim Wid As Integer = IIf(RFQImg.Width = 450, RFQImg.Width * 0.53333, RFQImg.Width * 0.24) 
    Dim Hgt As Integer = IIf(RFQImg.Height = 450, RFQImg.Height * 0.53333, RFQImg.Height * 0.24) 
    RFQImg.Dispose() 
    fs.Close() 

    xlWorksheet.Range("T1").Select() 
    Dim P As Object = xlWorksheet.Pictures.Insert(NewPath) 
    With P 
     .Left = xlWorksheet.Range("T1").Left 
     .Top = xlWorksheet.Range("T1").Top 
     .Placement = ExcelVB.XlPlacement.xlMoveAndSize 
     .PrintObject = True 
     With P.ShapeRange 
      .LockAspectRatio = False 
      .Width = Wid 
      .Height = Hgt 
      .IncrementTop(3.333228) 
      .IncrementLeft(102.1872441) 
     End With 
    End With 

End Sub 

에러 라인에서 발생

,174,515 내가 Environment.GetFolderPath (Environment.SpecialFolder.DesktopDirectory)에 전달하면 내가 프로그램 수출에서 SaveFold로 전달되는 것을 수정 시도
RFQImg.Save(NewPath) 

, 그냥 잘 작동하지만 난에서 통과 다른 파일 경로가 원인 오류.

+0

실행중인 컨텍스트는 무엇입니까? 서비스 또는 웹 페이지 또는 데스크톱 응용 프로그램을 사용하고 있습니까? –

+0

이미지를 만들지 않아도되므로 이미지를 만들 필요가 없습니다. 'File.Copy' 만 있으면 충분합니다.하지만 경로를 만드는 가장 좋은 방법은 아닙니다. Path.Combine도 참조하십시오. [ask]를 읽고 [둘러보기] – Plutonix

+1

코드를 게시하십시오. –

답변

0

좋아, 나는 여기 바보 같은 사람이다. 누군가 VendName 변수 인 벤더 이름을 끝에 공백 문자와 함께 저장했습니다. 그것이 내가 오류를 얻는 이유입니다. 나는 변수에 다듬기를 추가하고 모두 좋다.

관련 문제