Compare commits
5 Commits
7d84bd9b41
...
52f2394e6e
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
52f2394e6e | ||
|
|
1c00cb9fc6 | ||
|
|
ec986a36f2 | ||
|
|
db8e80dd50 | ||
|
|
ddd04a6f8a |
@@ -119,6 +119,12 @@
|
|||||||
<Compile Include="frmConfigTest.vb">
|
<Compile Include="frmConfigTest.vb">
|
||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="frmFilesystem.Designer.vb">
|
||||||
|
<DependentUpon>frmFilesystem.vb</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="frmFilesystem.vb">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
<Compile Include="frmFolderWatcher.Designer.vb">
|
<Compile Include="frmFolderWatcher.Designer.vb">
|
||||||
<DependentUpon>frmFolderWatcher.vb</DependentUpon>
|
<DependentUpon>frmFolderWatcher.vb</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
@@ -170,6 +176,9 @@
|
|||||||
<EmbeddedResource Include="frmConfigTest.resx">
|
<EmbeddedResource Include="frmConfigTest.resx">
|
||||||
<DependentUpon>frmConfigTest.vb</DependentUpon>
|
<DependentUpon>frmConfigTest.vb</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="frmFilesystem.resx">
|
||||||
|
<DependentUpon>frmFilesystem.vb</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="frmFolderWatcher.resx">
|
<EmbeddedResource Include="frmFolderWatcher.resx">
|
||||||
<DependentUpon>frmFolderWatcher.vb</DependentUpon>
|
<DependentUpon>frmFolderWatcher.vb</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
|||||||
37
GUIs.Test.TestGUI/frmFilesystem.Designer.vb
generated
Normal file
37
GUIs.Test.TestGUI/frmFilesystem.Designer.vb
generated
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
|
||||||
|
Partial Class frmFilesystem
|
||||||
|
Inherits System.Windows.Forms.Form
|
||||||
|
|
||||||
|
'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
|
||||||
|
<System.Diagnostics.DebuggerNonUserCode()> _
|
||||||
|
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
|
||||||
|
Try
|
||||||
|
If disposing AndAlso components IsNot Nothing Then
|
||||||
|
components.Dispose()
|
||||||
|
End If
|
||||||
|
Finally
|
||||||
|
MyBase.Dispose(disposing)
|
||||||
|
End Try
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
'Wird vom Windows Form-Designer benötigt.
|
||||||
|
Private components As System.ComponentModel.IContainer
|
||||||
|
|
||||||
|
'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
|
||||||
|
'Das Bearbeiten ist mit dem Windows Form-Designer möglich.
|
||||||
|
'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
|
||||||
|
<System.Diagnostics.DebuggerStepThrough()> _
|
||||||
|
Private Sub InitializeComponent()
|
||||||
|
Me.SuspendLayout()
|
||||||
|
'
|
||||||
|
'frmFilesystem
|
||||||
|
'
|
||||||
|
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||||
|
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
|
||||||
|
Me.ClientSize = New System.Drawing.Size(800, 450)
|
||||||
|
Me.Name = "frmFilesystem"
|
||||||
|
Me.Text = "frmFilesystem"
|
||||||
|
Me.ResumeLayout(False)
|
||||||
|
|
||||||
|
End Sub
|
||||||
|
End Class
|
||||||
120
GUIs.Test.TestGUI/frmFilesystem.resx
Normal file
120
GUIs.Test.TestGUI/frmFilesystem.resx
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
</root>
|
||||||
34
GUIs.Test.TestGUI/frmFilesystem.vb
Normal file
34
GUIs.Test.TestGUI/frmFilesystem.vb
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
Imports DigitalData.Modules.Logging
|
||||||
|
|
||||||
|
Public Class frmFilesystem
|
||||||
|
Private LogConfig As LogConfig
|
||||||
|
Private Filesystem As DigitalData.Modules.Filesystem.File
|
||||||
|
|
||||||
|
Private ShortName As String = "E:\some_test_file.txt"
|
||||||
|
Private LongName As String = "E:\some_test_file_with_some_more_data_and_with_some_more_data_and_with_some_more_data_and_with_some_more_data_and_with_some_more_data_and_with_some_more_data_and_with_some_more_data_and_with_some_more_data_and_with_some_more_data_and_with_some_more.txt"
|
||||||
|
|
||||||
|
Private Sub frmFilesystem_Load(sender As Object, e As EventArgs) Handles MyBase.Load
|
||||||
|
Try
|
||||||
|
LogConfig = New LogConfig(LogConfig.PathType.Temp)
|
||||||
|
Filesystem = New DigitalData.Modules.Filesystem.File(LogConfig)
|
||||||
|
|
||||||
|
Using oWriter = IO.File.CreateText("E:\some_test_file.txt")
|
||||||
|
oWriter.WriteLine("bla bla bla")
|
||||||
|
End Using
|
||||||
|
|
||||||
|
IO.File.Copy(ShortName, LongName)
|
||||||
|
|
||||||
|
Dim oVersion1 = Filesystem.GetVersionedFilename(LongName)
|
||||||
|
IO.File.Copy(ShortName, oVersion1)
|
||||||
|
|
||||||
|
Dim oVersion2 = Filesystem.GetVersionedFilename(LongName)
|
||||||
|
IO.File.Copy(ShortName, oVersion2)
|
||||||
|
Catch ex As Exception
|
||||||
|
|
||||||
|
Finally
|
||||||
|
IO.File.Delete(ShortName)
|
||||||
|
IO.File.Delete(LongName)
|
||||||
|
End Try
|
||||||
|
|
||||||
|
End Sub
|
||||||
|
End Class
|
||||||
12
GUIs.Test.TestGUI/frmStart.Designer.vb
generated
12
GUIs.Test.TestGUI/frmStart.Designer.vb
generated
@@ -24,6 +24,7 @@ Partial Class frmStart
|
|||||||
Private Sub InitializeComponent()
|
Private Sub InitializeComponent()
|
||||||
Me.Button1 = New System.Windows.Forms.Button()
|
Me.Button1 = New System.Windows.Forms.Button()
|
||||||
Me.Button2 = New System.Windows.Forms.Button()
|
Me.Button2 = New System.Windows.Forms.Button()
|
||||||
|
Me.Button3 = New System.Windows.Forms.Button()
|
||||||
Me.SuspendLayout()
|
Me.SuspendLayout()
|
||||||
'
|
'
|
||||||
'Button1
|
'Button1
|
||||||
@@ -44,11 +45,21 @@ Partial Class frmStart
|
|||||||
Me.Button2.Text = "LookupControl"
|
Me.Button2.Text = "LookupControl"
|
||||||
Me.Button2.UseVisualStyleBackColor = True
|
Me.Button2.UseVisualStyleBackColor = True
|
||||||
'
|
'
|
||||||
|
'Button3
|
||||||
|
'
|
||||||
|
Me.Button3.Location = New System.Drawing.Point(12, 134)
|
||||||
|
Me.Button3.Name = "Button3"
|
||||||
|
Me.Button3.Size = New System.Drawing.Size(236, 55)
|
||||||
|
Me.Button3.TabIndex = 0
|
||||||
|
Me.Button3.Text = "Filesystem"
|
||||||
|
Me.Button3.UseVisualStyleBackColor = True
|
||||||
|
'
|
||||||
'frmStart
|
'frmStart
|
||||||
'
|
'
|
||||||
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||||
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
|
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
|
||||||
Me.ClientSize = New System.Drawing.Size(800, 450)
|
Me.ClientSize = New System.Drawing.Size(800, 450)
|
||||||
|
Me.Controls.Add(Me.Button3)
|
||||||
Me.Controls.Add(Me.Button2)
|
Me.Controls.Add(Me.Button2)
|
||||||
Me.Controls.Add(Me.Button1)
|
Me.Controls.Add(Me.Button1)
|
||||||
Me.Name = "frmStart"
|
Me.Name = "frmStart"
|
||||||
@@ -59,4 +70,5 @@ Partial Class frmStart
|
|||||||
|
|
||||||
Friend WithEvents Button1 As Button
|
Friend WithEvents Button1 As Button
|
||||||
Friend WithEvents Button2 As Button
|
Friend WithEvents Button2 As Button
|
||||||
|
Friend WithEvents Button3 As Button
|
||||||
End Class
|
End Class
|
||||||
|
|||||||
@@ -6,4 +6,8 @@
|
|||||||
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
|
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
|
||||||
frmLookup.Show()
|
frmLookup.Show()
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
|
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
|
||||||
|
frmFilesystem.Show()
|
||||||
|
End Sub
|
||||||
End Class
|
End Class
|
||||||
@@ -167,7 +167,7 @@ Public Class Form1
|
|||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
|
Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
|
||||||
Dim oExtractor = New PDFAttachments(_logConfig)
|
Dim oExtractor = New PDFEmbeds(_logConfig)
|
||||||
Dim oResult = OpenFileDialog1.ShowDialog()
|
Dim oResult = OpenFileDialog1.ShowDialog()
|
||||||
|
|
||||||
If oResult = DialogResult.OK Then
|
If oResult = DialogResult.OK Then
|
||||||
|
|||||||
@@ -23,8 +23,8 @@ Imports DigitalData.Modules.Logging
|
|||||||
''' <remarks>
|
''' <remarks>
|
||||||
''' </remarks>
|
''' </remarks>
|
||||||
Public Class File
|
Public Class File
|
||||||
Private ReadOnly _logger As Logger
|
Private ReadOnly _Logger As Logger
|
||||||
Private ReadOnly _logConfig As LogConfig
|
Private ReadOnly _LogConfig As LogConfig
|
||||||
|
|
||||||
Private ReadOnly _invalidFilenameChars As String
|
Private ReadOnly _invalidFilenameChars As String
|
||||||
Private ReadOnly _invalidPathChars As String
|
Private ReadOnly _invalidPathChars As String
|
||||||
@@ -32,36 +32,42 @@ Public Class File
|
|||||||
Private Const REGEX_CLEAN_FILENAME As String = "[\\/:""<>|\b\0\r\n\t]"
|
Private Const REGEX_CLEAN_FILENAME As String = "[\\/:""<>|\b\0\r\n\t]"
|
||||||
Private Const REGEX_CLEAN_PATH As String = "[:""<>|\b\0\r\n\t]"
|
Private Const REGEX_CLEAN_PATH As String = "[:""<>|\b\0\r\n\t]"
|
||||||
|
|
||||||
|
' The limit enforced by windows for filenpaths is 260,
|
||||||
|
' so we use a slightly smaller number to have some Error margin.
|
||||||
|
'
|
||||||
|
' Source: https://docs.microsoft.com/de-de/windows/win32/fileio/naming-a-file?redirectedfrom=MSDN#maximum-path-length-limitation
|
||||||
|
Private Const MAX_FILE_PATH_LENGTH = 250
|
||||||
|
|
||||||
Private Const FILE_NAME_ACCESS_TEST = "accessTest.txt"
|
Private Const FILE_NAME_ACCESS_TEST = "accessTest.txt"
|
||||||
|
|
||||||
Public Sub New(LogConfig As LogConfig)
|
Public Sub New(LogConfig As LogConfig)
|
||||||
_logConfig = LogConfig
|
_LogConfig = LogConfig
|
||||||
_logger = LogConfig.GetLogger()
|
_Logger = LogConfig.GetLogger()
|
||||||
|
|
||||||
_invalidFilenameChars = String.Join("", Path.GetInvalidFileNameChars())
|
_invalidFilenameChars = String.Join("", Path.GetInvalidFileNameChars())
|
||||||
_invalidPathChars = String.Join("", Path.GetInvalidPathChars())
|
_invalidPathChars = String.Join("", Path.GetInvalidPathChars())
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Public Function GetCleanFilename(FileName As String) As String
|
Public Function GetCleanFilename(FileName As String) As String
|
||||||
_logger.Debug("Filename before cleaning: [{0}]", FileName)
|
_Logger.Debug("Filename before cleaning: [{0}]", FileName)
|
||||||
|
|
||||||
Dim oCleanName As String = FileName
|
Dim oCleanName As String = FileName
|
||||||
oCleanName = Regex.Replace(oCleanName, _invalidFilenameChars, String.Empty)
|
oCleanName = Regex.Replace(oCleanName, _invalidFilenameChars, String.Empty)
|
||||||
oCleanName = Regex.Replace(oCleanName, REGEX_CLEAN_FILENAME, String.Empty, RegexOptions.Singleline)
|
oCleanName = Regex.Replace(oCleanName, REGEX_CLEAN_FILENAME, String.Empty, RegexOptions.Singleline)
|
||||||
|
|
||||||
_logger.Debug("Filename after cleaning: [{0}]", oCleanName)
|
_Logger.Debug("Filename after cleaning: [{0}]", oCleanName)
|
||||||
|
|
||||||
Return oCleanName
|
Return oCleanName
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Public Function GetCleanPath(FilePath As String) As String
|
Public Function GetCleanPath(FilePath As String) As String
|
||||||
_logger.Debug("Path before cleaning: [{0}]", FilePath)
|
_Logger.Debug("Path before cleaning: [{0}]", FilePath)
|
||||||
|
|
||||||
Dim oCleanName As String = FilePath
|
Dim oCleanName As String = FilePath
|
||||||
oCleanName = Regex.Replace(oCleanName, _invalidPathChars, String.Empty)
|
oCleanName = Regex.Replace(oCleanName, _invalidPathChars, String.Empty)
|
||||||
oCleanName = Regex.Replace(oCleanName, REGEX_CLEAN_PATH, String.Empty, RegexOptions.Singleline)
|
oCleanName = Regex.Replace(oCleanName, REGEX_CLEAN_PATH, String.Empty, RegexOptions.Singleline)
|
||||||
|
|
||||||
_logger.Debug("Path after cleaning: [{0}]", oCleanName)
|
_Logger.Debug("Path after cleaning: [{0}]", oCleanName)
|
||||||
|
|
||||||
Return oCleanName
|
Return oCleanName
|
||||||
End Function
|
End Function
|
||||||
@@ -118,20 +124,32 @@ Public Class File
|
|||||||
oFileVersion = 1
|
oFileVersion = 1
|
||||||
End If
|
End If
|
||||||
|
|
||||||
|
' Shorten the filename (only filename, without extension or version)
|
||||||
|
' by cutting the length in half. This should work no matter how long the path and/or filename are.
|
||||||
|
If oFileName.Length > MAX_FILE_PATH_LENGTH Then
|
||||||
|
_Logger.Info("Filename is too long. Filename will be cut to prevent further errors.")
|
||||||
|
_Logger.Info("Original Filename is: {0}", oFileNameWithoutExtension)
|
||||||
|
Dim oNewLength As Integer = Math.Round(oFileNameWithoutExtension.Length / 2)
|
||||||
|
Dim oNewFileNameWithoutExtension = oFileNameWithoutExtension.Substring(0, oNewLength)
|
||||||
|
_Logger.Info("New Filename will be: {0}", oNewFileNameWithoutExtension)
|
||||||
|
|
||||||
|
oFileNameWithoutExtension = oNewFileNameWithoutExtension
|
||||||
|
End If
|
||||||
|
|
||||||
' while file exists, increment version
|
' while file exists, increment version
|
||||||
Do
|
Do
|
||||||
oFinalFileName = Path.Combine(oDestinationDir, GetFilenameWithVersion(oFileNameWithoutExtension, oVersionSeparator, oFileVersion, oExtension))
|
oFinalFileName = Path.Combine(oDestinationDir, GetFilenameWithVersion(oFileNameWithoutExtension, oVersionSeparator, oFileVersion, oExtension))
|
||||||
_logger.Debug("Intermediate Filename is {0}", oFinalFileName)
|
_Logger.Debug("Intermediate Filename is {0}", oFinalFileName)
|
||||||
_logger.Debug("File version: {0}", oFileVersion)
|
_Logger.Debug("File version: {0}", oFileVersion)
|
||||||
oFileVersion += 1
|
oFileVersion += 1
|
||||||
Loop While (IO.File.Exists(oFinalFileName))
|
Loop While (IO.File.Exists(oFinalFileName))
|
||||||
|
|
||||||
_logger.Debug("Final Filename is {0}", oFinalFileName)
|
_Logger.Debug("Final Filename is {0}", oFinalFileName)
|
||||||
|
|
||||||
Return oFinalFileName
|
Return oFinalFileName
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
_logger.Warn("Filename {0} could not be versioned. Original filename will be returned!", Destination)
|
_Logger.Warn("Filename {0} could not be versioned. Original filename will be returned!", Destination)
|
||||||
_logger.Error(ex)
|
_Logger.Error(ex)
|
||||||
Return Destination
|
Return Destination
|
||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
@@ -177,29 +195,29 @@ Public Class File
|
|||||||
ToList()
|
ToList()
|
||||||
|
|
||||||
If oFiles.Count = 0 Then
|
If oFiles.Count = 0 Then
|
||||||
_logger.Debug("No files found that match the criterias.")
|
_Logger.Debug("No files found that match the criterias.")
|
||||||
Return True
|
Return True
|
||||||
End If
|
End If
|
||||||
|
|
||||||
_logger.Debug("Deleting old files (Found {0}).", oFiles.Count)
|
_Logger.Debug("Deleting old files (Found {0}).", oFiles.Count)
|
||||||
|
|
||||||
For Each oFile As FileInfo In oFiles
|
For Each oFile As FileInfo In oFiles
|
||||||
Try
|
Try
|
||||||
oFile.Delete()
|
oFile.Delete()
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
If ContinueOnError = False Then
|
If ContinueOnError = False Then
|
||||||
_logger.Warn("Deleting files was aborted at file {0}.", oFile.FullName)
|
_Logger.Warn("Deleting files was aborted at file {0}.", oFile.FullName)
|
||||||
Return False
|
Return False
|
||||||
End If
|
End If
|
||||||
oUnableToDeleteCounter = oUnableToDeleteCounter + 1
|
oUnableToDeleteCounter = oUnableToDeleteCounter + 1
|
||||||
_logger.Warn("File {0} could not be deleted!")
|
_Logger.Warn("File {0} could not be deleted!")
|
||||||
End Try
|
End Try
|
||||||
Next
|
Next
|
||||||
|
|
||||||
If oUnableToDeleteCounter > 0 Then
|
If oUnableToDeleteCounter > 0 Then
|
||||||
_logger.Debug("Old files partially removed. {0} files could not be removed.", oUnableToDeleteCounter)
|
_Logger.Debug("Old files partially removed. {0} files could not be removed.", oUnableToDeleteCounter)
|
||||||
Else
|
Else
|
||||||
_logger.Debug("Old files removed.")
|
_Logger.Debug("Old files removed.")
|
||||||
End If
|
End If
|
||||||
|
|
||||||
Return True
|
Return True
|
||||||
@@ -256,27 +274,27 @@ Public Class File
|
|||||||
Public Function CreateDirectory(DirectoryPath As String, Optional TestWriteAccess As Boolean = True) As String
|
Public Function CreateDirectory(DirectoryPath As String, Optional TestWriteAccess As Boolean = True) As String
|
||||||
Dim oFinalPath As String
|
Dim oFinalPath As String
|
||||||
If Directory.Exists(DirectoryPath) Then
|
If Directory.Exists(DirectoryPath) Then
|
||||||
_logger.Debug("Directory {0} already exists. Skipping.", DirectoryPath)
|
_Logger.Debug("Directory {0} already exists. Skipping.", DirectoryPath)
|
||||||
oFinalPath = DirectoryPath
|
oFinalPath = DirectoryPath
|
||||||
Else
|
Else
|
||||||
Try
|
Try
|
||||||
Directory.CreateDirectory(DirectoryPath)
|
Directory.CreateDirectory(DirectoryPath)
|
||||||
oFinalPath = DirectoryPath
|
oFinalPath = DirectoryPath
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
_logger.Error(ex)
|
_Logger.Error(ex)
|
||||||
_logger.Warn("Directory {0} could not be created. Temp path will be used instead.", DirectoryPath)
|
_Logger.Warn("Directory {0} could not be created. Temp path will be used instead.", DirectoryPath)
|
||||||
oFinalPath = Path.GetTempPath()
|
oFinalPath = Path.GetTempPath()
|
||||||
End Try
|
End Try
|
||||||
End If
|
End If
|
||||||
|
|
||||||
If TestWriteAccess AndAlso Not TestPathIsWritable(DirectoryPath) Then
|
If TestWriteAccess AndAlso Not TestPathIsWritable(DirectoryPath) Then
|
||||||
_logger.Warn("Directory {0} is not writable. Temp path will be used instead.", DirectoryPath)
|
_Logger.Warn("Directory {0} is not writable. Temp path will be used instead.", DirectoryPath)
|
||||||
oFinalPath = Path.GetTempPath()
|
oFinalPath = Path.GetTempPath()
|
||||||
Else
|
Else
|
||||||
oFinalPath = DirectoryPath
|
oFinalPath = DirectoryPath
|
||||||
End If
|
End If
|
||||||
|
|
||||||
_logger.Debug("Using path {0}", oFinalPath)
|
_Logger.Debug("Using path {0}", oFinalPath)
|
||||||
|
|
||||||
Return oFinalPath
|
Return oFinalPath
|
||||||
End Function
|
End Function
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ Imports System.Runtime.InteropServices
|
|||||||
<Assembly: AssemblyDescription("")>
|
<Assembly: AssemblyDescription("")>
|
||||||
<Assembly: AssemblyCompany("Digital Data")>
|
<Assembly: AssemblyCompany("Digital Data")>
|
||||||
<Assembly: AssemblyProduct("Modules.Filesystem")>
|
<Assembly: AssemblyProduct("Modules.Filesystem")>
|
||||||
<Assembly: AssemblyCopyright("Copyright © 2018")>
|
<Assembly: AssemblyCopyright("Copyright © 2021")>
|
||||||
<Assembly: AssemblyTrademark("")>
|
<Assembly: AssemblyTrademark("")>
|
||||||
|
|
||||||
<Assembly: ComVisible(False)>
|
<Assembly: ComVisible(False)>
|
||||||
@@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices
|
|||||||
' übernehmen, indem Sie "*" eingeben:
|
' übernehmen, indem Sie "*" eingeben:
|
||||||
' <Assembly: AssemblyVersion("1.0.*")>
|
' <Assembly: AssemblyVersion("1.0.*")>
|
||||||
|
|
||||||
<Assembly: AssemblyVersion("1.0.2.0")>
|
<Assembly: AssemblyVersion("1.0.3.0")>
|
||||||
<Assembly: AssemblyFileVersion("1.0.2.0")>
|
<Assembly: AssemblyFileVersion("1.0.3.0")>
|
||||||
|
|||||||
@@ -112,7 +112,7 @@
|
|||||||
<Compile Include="ZUGFeRDInterface\CrossIndustryDocumentType.vb" />
|
<Compile Include="ZUGFeRDInterface\CrossIndustryDocumentType.vb" />
|
||||||
<Compile Include="ZUGFeRDInterface.vb" />
|
<Compile Include="ZUGFeRDInterface.vb" />
|
||||||
<Compile Include="ZUGFeRDInterface\FileGroups.vb" />
|
<Compile Include="ZUGFeRDInterface\FileGroups.vb" />
|
||||||
<Compile Include="ZUGFeRDInterface\PDFAttachments.vb" />
|
<Compile Include="ZUGFeRDInterface\PDFEmbeds.vb" />
|
||||||
<Compile Include="ZUGFeRDInterface\PropertyValues.vb" />
|
<Compile Include="ZUGFeRDInterface\PropertyValues.vb" />
|
||||||
<Compile Include="ZUGFeRDInterface\XmlItemProperty.vb" />
|
<Compile Include="ZUGFeRDInterface\XmlItemProperty.vb" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ Imports System.Runtime.InteropServices
|
|||||||
<Assembly: AssemblyDescription("")>
|
<Assembly: AssemblyDescription("")>
|
||||||
<Assembly: AssemblyCompany("Digital Data")>
|
<Assembly: AssemblyCompany("Digital Data")>
|
||||||
<Assembly: AssemblyProduct("Modules.Interfaces")>
|
<Assembly: AssemblyProduct("Modules.Interfaces")>
|
||||||
<Assembly: AssemblyCopyright("Copyright © 2018")>
|
<Assembly: AssemblyCopyright("Copyright © 2021")>
|
||||||
<Assembly: AssemblyTrademark("")>
|
<Assembly: AssemblyTrademark("")>
|
||||||
|
|
||||||
<Assembly: ComVisible(False)>
|
<Assembly: ComVisible(False)>
|
||||||
@@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices
|
|||||||
' übernehmen, indem Sie "*" eingeben:
|
' übernehmen, indem Sie "*" eingeben:
|
||||||
' <Assembly: AssemblyVersion("1.0.*")>
|
' <Assembly: AssemblyVersion("1.0.*")>
|
||||||
|
|
||||||
<Assembly: AssemblyVersion("1.5.1.0")>
|
<Assembly: AssemblyVersion("1.5.2.0")>
|
||||||
<Assembly: AssemblyFileVersion("1.5.1.0")>
|
<Assembly: AssemblyFileVersion("1.5.2.0")>
|
||||||
|
|||||||
@@ -122,12 +122,21 @@ Public Class ZUGFeRDInterface
|
|||||||
End Function
|
End Function
|
||||||
|
|
||||||
Public Function ValidateZUGFeRDFileWithGDPicture(Stream As Stream) As XPathDocument
|
Public Function ValidateZUGFeRDFileWithGDPicture(Stream As Stream) As XPathDocument
|
||||||
Dim oAttachmentExtractor = New PDFAttachments(_logConfig)
|
Dim oEmbedExtractor = New PDFEmbeds(_logConfig)
|
||||||
Dim oAllowedExtensions = New List(Of String) From {"xml"}
|
Dim oAllowedExtensions = New List(Of String) From {"xml"}
|
||||||
|
|
||||||
Try
|
Try
|
||||||
Dim oResults = oAttachmentExtractor.Extract(Stream, oAllowedExtensions)
|
Dim oFiles = oEmbedExtractor.Extract(Stream, oAllowedExtensions)
|
||||||
Return HandleAttachments(oResults)
|
|
||||||
|
' Attachments are in this case the files that are embedded into a pdf file,
|
||||||
|
' like for example the zugferd-invoice.xml file
|
||||||
|
Return HandleEmbeddedFiles(oFiles)
|
||||||
|
|
||||||
|
Catch ex As ZUGFeRDExecption
|
||||||
|
' Don't log ZUGFeRD Exceptions here, they should be handled by the calling code.
|
||||||
|
' It also produces misleading error messages when checking if an attachment is a zugferd file.
|
||||||
|
Throw ex
|
||||||
|
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
_logger.Error(ex)
|
_logger.Error(ex)
|
||||||
Throw ex
|
Throw ex
|
||||||
@@ -135,23 +144,28 @@ Public Class ZUGFeRDInterface
|
|||||||
End Function
|
End Function
|
||||||
|
|
||||||
Public Function ValidateZUGFeRDFileWithGDPicture(Path As String) As XPathDocument
|
Public Function ValidateZUGFeRDFileWithGDPicture(Path As String) As XPathDocument
|
||||||
Dim oAttachmentExtractor = New PDFAttachments(_logConfig)
|
Dim oEmbedExtractor = New PDFEmbeds(_logConfig)
|
||||||
Dim oAllowedExtensions = New List(Of String) From {"xml"}
|
Dim oAllowedExtensions = New List(Of String) From {"xml"}
|
||||||
|
|
||||||
Try
|
Try
|
||||||
Dim oResults = oAttachmentExtractor.Extract(Path, oAllowedExtensions)
|
Dim oFiles = oEmbedExtractor.Extract(Path, oAllowedExtensions)
|
||||||
Return HandleAttachments(oResults)
|
|
||||||
|
' Attachments are in this case the files that are embedded into a pdf file,
|
||||||
|
' like for example the zugferd-invoice.xml file
|
||||||
|
Return HandleEmbeddedFiles(oFiles)
|
||||||
|
|
||||||
Catch ex As ZUGFeRDExecption
|
Catch ex As ZUGFeRDExecption
|
||||||
' Don't log ZUGFeRD Exceptions here, they should be handled by the calling code.
|
' Don't log ZUGFeRD Exceptions here, they should be handled by the calling code.
|
||||||
' It also produces misleading error messages when checking if an attachment is a zugferd file.
|
' It also produces misleading error messages when checking if an attachment is a zugferd file.
|
||||||
Throw ex
|
Throw ex
|
||||||
|
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
_logger.Error(ex)
|
_logger.Error(ex)
|
||||||
Throw ex
|
Throw ex
|
||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Private Function HandleAttachments(Results As List(Of PDFAttachments.AttachmentResult)) As XPathDocument
|
Private Function HandleEmbeddedFiles(Results As List(Of PDFEmbeds.EmbeddedFile)) As XPathDocument
|
||||||
Dim oXmlDocument As XPathDocument
|
Dim oXmlDocument As XPathDocument
|
||||||
|
|
||||||
If Results Is Nothing Then
|
If Results Is Nothing Then
|
||||||
@@ -163,10 +177,10 @@ Public Class ZUGFeRDInterface
|
|||||||
End If
|
End If
|
||||||
|
|
||||||
Dim oFound As Boolean = False
|
Dim oFound As Boolean = False
|
||||||
Dim oFoundResult As PDFAttachments.AttachmentResult = Nothing
|
Dim oFoundResult As PDFEmbeds.EmbeddedFile = Nothing
|
||||||
|
|
||||||
For Each oResult In Results
|
For Each oResult In Results
|
||||||
If oResult.FileName.ToUpper() = PDFAttachments.ZUGFERD_XML_FILENAME.ToUpper() Then
|
If oResult.FileName.ToUpper() = PDFEmbeds.ZUGFERD_XML_FILENAME.ToUpper() Then
|
||||||
oFound = True
|
oFound = True
|
||||||
oFoundResult = oResult
|
oFoundResult = oResult
|
||||||
End If
|
End If
|
||||||
@@ -186,9 +200,10 @@ Public Class ZUGFeRDInterface
|
|||||||
' Don't log ZUGFeRD Exceptions here, they should be handled by the calling code.
|
' Don't log ZUGFeRD Exceptions here, they should be handled by the calling code.
|
||||||
' It also produces misleading error messages when checking if an attachment is a zugferd file.
|
' It also produces misleading error messages when checking if an attachment is a zugferd file.
|
||||||
Throw ex
|
Throw ex
|
||||||
|
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
_logger.Error(ex)
|
_logger.Error(ex)
|
||||||
Throw ex
|
Throw New ZUGFeRDExecption(ErrorType.NoValidZugferd, "Datei ist eine ungültige ZUGFeRD Datei.")
|
||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
|
|||||||
@@ -3,12 +3,12 @@ Imports System.IO
|
|||||||
Imports DigitalData.Modules.Logging
|
Imports DigitalData.Modules.Logging
|
||||||
Imports GdPicture14
|
Imports GdPicture14
|
||||||
|
|
||||||
Public Class PDFAttachments
|
Public Class PDFEmbeds
|
||||||
Private ReadOnly Logger As Logger
|
Private ReadOnly Logger As Logger
|
||||||
|
|
||||||
Public Const ZUGFERD_XML_FILENAME = "ZUGFeRD-invoice.xml"
|
Public Const ZUGFERD_XML_FILENAME = "ZUGFeRD-invoice.xml"
|
||||||
|
|
||||||
Public Class AttachmentResult
|
Public Class EmbeddedFile
|
||||||
Public FileName As String
|
Public FileName As String
|
||||||
Public FileContents As Byte()
|
Public FileContents As Byte()
|
||||||
End Class
|
End Class
|
||||||
@@ -23,8 +23,8 @@ Public Class PDFAttachments
|
|||||||
''' </summary>
|
''' </summary>
|
||||||
''' <param name="FilePath">Filepath of the pdf</param>
|
''' <param name="FilePath">Filepath of the pdf</param>
|
||||||
''' <param name="AllowedExtensions">List of allowed extensions to be extracted</param>
|
''' <param name="AllowedExtensions">List of allowed extensions to be extracted</param>
|
||||||
Public Function Extract(FilePath As String, AllowedExtensions As List(Of String)) As List(Of AttachmentResult)
|
Public Function Extract(FilePath As String, AllowedExtensions As List(Of String)) As List(Of EmbeddedFile)
|
||||||
Dim oResults As New List(Of AttachmentResult)
|
Dim oFile As New List(Of EmbeddedFile)
|
||||||
Dim oExtensions = AllowedExtensions.ConvertAll(New Converter(Of String, String)(Function(ext) ext.ToUpper))
|
Dim oExtensions = AllowedExtensions.ConvertAll(New Converter(Of String, String)(Function(ext) ext.ToUpper))
|
||||||
|
|
||||||
Logger.Debug("Extracting embedded files from [{0}]", FilePath)
|
Logger.Debug("Extracting embedded files from [{0}]", FilePath)
|
||||||
@@ -32,14 +32,14 @@ Public Class PDFAttachments
|
|||||||
Try
|
Try
|
||||||
Using oGDPicturePDF As New GdPicturePDF()
|
Using oGDPicturePDF As New GdPicturePDF()
|
||||||
If oGDPicturePDF.LoadFromFile(FilePath, False) = GdPictureStatus.OK Then
|
If oGDPicturePDF.LoadFromFile(FilePath, False) = GdPictureStatus.OK Then
|
||||||
oResults = DoExtract(oGDPicturePDF, oExtensions)
|
oFile = DoExtract(oGDPicturePDF, oExtensions)
|
||||||
Else
|
Else
|
||||||
Dim oMessage = String.Format("The file [{0}] can't be loaded. Status: [{1}]", FilePath, oGDPicturePDF.GetStat().ToString())
|
Dim oMessage = String.Format("The file [{0}] can't be loaded. Status: [{1}]", FilePath, oGDPicturePDF.GetStat().ToString())
|
||||||
Throw New ApplicationException(oMessage)
|
Throw New ApplicationException(oMessage)
|
||||||
End If
|
End If
|
||||||
End Using
|
End Using
|
||||||
|
|
||||||
Return oResults
|
Return oFile
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
Logger.Warn("Unexpected Error while Extracting attachments from File [{0}]", FilePath)
|
Logger.Warn("Unexpected Error while Extracting attachments from File [{0}]", FilePath)
|
||||||
Logger.Error(ex)
|
Logger.Error(ex)
|
||||||
@@ -53,8 +53,8 @@ Public Class PDFAttachments
|
|||||||
''' </summary>
|
''' </summary>
|
||||||
''' <param name="Stream">Filestream of the pdf</param>
|
''' <param name="Stream">Filestream of the pdf</param>
|
||||||
''' <param name="AllowedExtensions">List of allowed extensions to be extracted</param>
|
''' <param name="AllowedExtensions">List of allowed extensions to be extracted</param>
|
||||||
Public Function Extract(Stream As Stream, AllowedExtensions As List(Of String)) As List(Of AttachmentResult)
|
Public Function Extract(Stream As Stream, AllowedExtensions As List(Of String)) As List(Of EmbeddedFile)
|
||||||
Dim oResults As New List(Of AttachmentResult)
|
Dim oResults As New List(Of EmbeddedFile)
|
||||||
Dim oExtensions = AllowedExtensions.ConvertAll(New Converter(Of String, String)(Function(ext) ext.ToUpper))
|
Dim oExtensions = AllowedExtensions.ConvertAll(New Converter(Of String, String)(Function(ext) ext.ToUpper))
|
||||||
|
|
||||||
Logger.Debug("Extracting embedded files from stream")
|
Logger.Debug("Extracting embedded files from stream")
|
||||||
@@ -77,8 +77,8 @@ Public Class PDFAttachments
|
|||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Private Function DoExtract(GDPicturePDF As GdPicturePDF, pExtensions As List(Of String)) As List(Of AttachmentResult)
|
Private Function DoExtract(GDPicturePDF As GdPicturePDF, pExtensions As List(Of String)) As List(Of EmbeddedFile)
|
||||||
Dim oResults As New List(Of AttachmentResult)
|
Dim oResults As New List(Of EmbeddedFile)
|
||||||
Dim oEmbeddedFileCount As Integer = GDPicturePDF.GetEmbeddedFileCount()
|
Dim oEmbeddedFileCount As Integer = GDPicturePDF.GetEmbeddedFileCount()
|
||||||
|
|
||||||
If GDPicturePDF.GetStat() = GdPictureStatus.OK Then
|
If GDPicturePDF.GetStat() = GdPictureStatus.OK Then
|
||||||
@@ -104,7 +104,7 @@ Public Class PDFAttachments
|
|||||||
If oStatus = GdPictureStatus.OK Then
|
If oStatus = GdPictureStatus.OK Then
|
||||||
Logger.Debug("Embedded file [{0}] extracted sucessfully!", oFileName)
|
Logger.Debug("Embedded file [{0}] extracted sucessfully!", oFileName)
|
||||||
|
|
||||||
oResults.Add(New AttachmentResult() With {
|
oResults.Add(New EmbeddedFile() With {
|
||||||
.FileContents = oFileData,
|
.FileContents = oFileData,
|
||||||
.FileName = oFileName
|
.FileName = oFileName
|
||||||
})
|
})
|
||||||
@@ -124,7 +124,7 @@ Public Class ImportZUGFeRDFiles
|
|||||||
Public Sub Start(Arguments As Object) Implements IJob.Start
|
Public Sub Start(Arguments As Object) Implements IJob.Start
|
||||||
Dim oArgs As WorkerArgs = Arguments
|
Dim oArgs As WorkerArgs = Arguments
|
||||||
Dim oPropertyExtractor = New PropertyValues(_logConfig)
|
Dim oPropertyExtractor = New PropertyValues(_logConfig)
|
||||||
Dim oAttachmentExtractor = New PDFAttachments(_logConfig)
|
Dim oAttachmentExtractor = New PDFEmbeds(_logConfig)
|
||||||
|
|
||||||
_logger.Debug("Starting Job {0}", [GetType].Name)
|
_logger.Debug("Starting Job {0}", [GetType].Name)
|
||||||
|
|
||||||
@@ -172,7 +172,7 @@ Public Class ImportZUGFeRDFiles
|
|||||||
' Create file lists
|
' Create file lists
|
||||||
Dim oFileGroupFiles As List(Of FileInfo) = oFileGroup.Value
|
Dim oFileGroupFiles As List(Of FileInfo) = oFileGroup.Value
|
||||||
Dim oEmailAttachmentFiles As New List(Of FileInfo)
|
Dim oEmailAttachmentFiles As New List(Of FileInfo)
|
||||||
Dim oEmbeddedAttachmentFiles As New List(Of PDFAttachments.AttachmentResult)
|
Dim oEmbeddedAttachmentFiles As New List(Of PDFEmbeds.EmbeddedFile)
|
||||||
|
|
||||||
Dim oMessageId As String = oFileGroup.Key
|
Dim oMessageId As String = oFileGroup.Key
|
||||||
Dim oMissingProperties As New List(Of String)
|
Dim oMissingProperties As New List(Of String)
|
||||||
@@ -462,7 +462,7 @@ Public Class ImportZUGFeRDFiles
|
|||||||
MessageId As String,
|
MessageId As String,
|
||||||
Files As List(Of FileInfo),
|
Files As List(Of FileInfo),
|
||||||
AttachmentFiles As List(Of FileInfo),
|
AttachmentFiles As List(Of FileInfo),
|
||||||
EmbeddedAttachments As List(Of PDFAttachments.AttachmentResult),
|
EmbeddedAttachments As List(Of PDFEmbeds.EmbeddedFile),
|
||||||
MoveDirectory As String,
|
MoveDirectory As String,
|
||||||
IsSuccess As Boolean)
|
IsSuccess As Boolean)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user