2017-09-19 5 views
-2

En espérant que quelqu'un ici puisse m'aider. J'ai lu les nombreuses autres questions similaires sur StackOverflow mais n'ai pas trouvé de réponse qui fonctionne pour moi ...'Une erreur générique s'est produite dans GDI +.' enregistrer l'image à ne importe où pas Environment.GetFolderPath (Environment.SpecialFolder.DesktopDirectory)

J'ai du code qui exporte des données dans un rapport Excel. Une partie de ce code copie une image et la place dans un dossier créé sur le bureau. Puis insère également cette image dans le rapport Excel. Les données sont exportées de deux manières différentes. Les utilisateurs peuvent exporter un élément à la fois ou un programme entier d'éléments. Lors de l'exportation d'un élément, un dossier est créé sur le bureau avec l'élément ItemID et l'image est enregistrée dans ce dossier. Lors de l'exportation d'un programme, un dossier est mis en cache sur le bureau pour le programme, un autre dossier est créé dans ce dossier pour le fournisseur et un autre dans le fournisseur pour l'élément; Ensuite, l'image est enregistrée dans ce dossier. Le code fonctionne très bien Lors de l'exportation seulement un élément, mais donne une erreur ...

Une erreur générique est produite dans GDI +

... sur la première image de sauvegarde lors de l'exportation d'un programme.

Le code pour appeler la méthode lors de l'exportation d'un produit est ...

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

Le code pour exporter un groupe d'articles est ...

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 

Le code étant appelé est. .. (SaveFold est une variable de classe)

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 

l'erreur se produit sur la ligne

RFQImg.Save(NewPath) 

J'ai essayé de modifier ce qui est transmis en tant que SaveFold de l'exportation du programme, il fonctionne très bien si je passe Environment.GetFolderPath (Environment.SpecialFolder.DesktopDirectory), mais tout autre chemin de fichier je passe la cause Erreur.

+0

Dans quel contexte utilisez-vous cela? Êtes-vous dans un service, une page Web ou une application de bureau? –

+0

Vous n'avez pas besoin de créer une image puisque vous ne modifiez pas l'image. 'File.Copy' est tout ce dont vous avez besoin (mais ce n'est pas la meilleure façon de créer un chemin - voir aussi' Path.Combine' ... Veuillez lire [ask] et prenez le [tour] – Plutonix

+1

Vous avez posté le code qui fonctionne. Nous ne pouvons pas voir ce qui n'a pas fonctionné, ce n'est pas utile –

Répondre

0

Ok, je suis un peu idiot ici. Quelqu'un a enregistré le nom du fournisseur qui était la variable VendName avec un caractère espace à la fin. C'est pourquoi je recevais l'erreur. J'ai ajouté une coupe aux variables et tout va bien maintenant.