今天做了个读取文件信息的小例子,发上来给大家看看,有什么不对的提醒我一下啊。
首先添加个VB的类库
Imports EdmLib
Namespace FilesInfo
Public Class FilesInfo
Dim vault As IEdmVault7
Dim lst As IEdmBatchListing2
Dim cols() As EdmListCol
Dim folder As IEdmFolder5
''' <summary>
''' 构造函数
''' </summary>
''' <param name="path">需要读取的文件目录名</param>
''' <param name="mvault">电子仓库</param>
''' <remarks>只读取已SLd为扩展名开头的文件</remarks>
Public Sub New(ByVal path As String, ByVal mvault As IEdmVault7)
vault = mvault '为vault赋值
lst = vault.CreateUtility(EdmUtility.EdmUtil_BatchList) '创建 IEdmBatchListing2对象
If path = "" Then '如果没有添加路径则退出程序
Exit Sub
End If
folder = vault.GetFolderFromPath(path) '获取vault指定的文件夹
Dim pos As IEdmPos5 = folder.GetFirstFilePosition() '创建pos对象用于遍历文件夹中的文件
While Not pos.IsNull
Dim file As IEdmFile5 = folder.GetNextFile(pos) '创建file对象并赋值
AddFile(file.GetLocalPath(folder.ID), 1)
End While
End Sub
''' <summary>
''' 向IEdmBatchListing2加入文件
''' </summary>
''' <param name="filename">文件名</param>
''' <param name="lparam">通常为1</param>
''' <remarks></remarks>
Public Sub AddFile(ByVal filename As String, Optional ByVal lparam As Integer = 1)
Dim ft As Date
Try
ft = FileSystem.FileDateTime(filename) '取得文件夹中文件的日期
Catch
MsgBox(vault.GetErrorMessaage(Err.Number))
Finally
lst.AddFile(filename, ft, lparam) '向IEdmBatchListing2加入文件
End Try
End Sub
''' <summary>
''' 获取零件信息
''' </summary>
''' <param name="SetName">Bom条目名</param>
''' <returns>List(Of Dictionary(Of String, String))</returns>
''' <remarks></remarks>
Function GetFilesInfo(ByVal SetName As String) As List(Of Dictionary(Of String, String))
Dim infolst As List(Of Dictionary(Of String, String)) = New List(Of Dictionary(Of String, String))() '定义一个泛型数组
Dim files() As EdmListFile = Nothing ' 定义一个EdmListFile对象并赋空值,如果这里不赋空值有时会出错
GetFiles(files, SetName) '获取文件夹中的文件
For Each efile As EdmListFile In files '循环添加List中的文件到一维数组infodic中
Dim infodic As Dictionary(Of String, String) = New Dictionary(Of String, String) '定义一个一维的泛型数组
infodic.Add("Version", efile.mbsRevisionName) '添加版本号
infodic.Add("State", efile.moCurrentState.mbsStateName) '添加状态
infodic.Add("FileID", efile.mlFileID.ToString()) '添加FileID
infodic.Add("FolderID", efile.mlFolderID.ToString()) '添加FolderID
Dim datas() As Object
datas = efile.moColumnData '把一列赋给datas
Dim idx As Integer = 0
For Each col As EdmListCol In cols '循环加列到数组
If Not (datas(idx) Is Nothing) Then
infodic.Add(col.mbsCaption, datas(idx).ToString())
Else
infodic.Add(col.mbsCaption, "")
End If
idx = idx + 1
Next
infolst.Add(infodic)
Next
GetFilesInfo = infolst '返回infolist
End Function
''' <summary>
''' 获取文件
''' </summary>
''' <param name="files">添加后的所有文件</param>
''' <param name="SetName">BOM条目名</param>
''' <remarks></remarks>
Public Sub GetFiles(ByRef files() As EdmListFile, ByVal SetName As String)
lst.CreateListEx(SetName, 0, cols) '调用IEdmBatchListing2中的方法,添加文件
lst.GetFiles(files) '获取files中的所有文件
End Sub
End Class
End Namespace
然后把类库编译成dll 再创建一个窗体 在窗体中添加已编译好的dll
在窗体上添加2个按钮,一个文本框,一个listview
文本框赋初值D:\Trainning\Trainning\A390 第一个Trainning是D盘的文件夹,第二个是本地试图的名字。A390是本地试图里面的文件夹
'窗体的主要代码
Imports EdmLib
Imports YTZhaoyang.Trainning.FilesInfo '自己写的类库文件
Public Class frmTestBatchList
Dim vault As IEdmVault7
Dim Finfo As FilesInfo.FilesInfo
Public Sub New()
' 此调用是 Windows 窗体设计器所必需的。
InitializeComponent()
' 在 InitializeComponent() 调用之后添加任何初始化。
vault = New EdmVault5
End Sub
Private Sub btn_InsertFiles_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_InsertFiles.Click
Finfo = New FilesInfo.FilesInfo(filePath.Text, vault) '创建FilesInfo对象,并读取文件数据
End Sub
Private Sub frmTestBatchList_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
vault.LoginAuto("Trainning", Me.Handle.ToInt32) '登陆PDM
Dim userMgr As IEdmUserMgr5 '定义UserMgr5类型对象
userMgr = vault
Dim pos As IEdmPos5
pos = userMgr.GetFirstUserPosition
Dim user As IEdmUser5
While Not pos.IsNull
user = userMgr.GetNextUser(pos)
ComboBox1.Items.Add(user.Name)
End While
End Sub
Private Sub btn_GetInfo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_GetInfo.Click
Dim lst As List(Of Dictionary(Of String, String)) = Finfo.GetFilesInfo("零件信息")
For Each dic As Dictionary(Of String, String) In lst
Dim item As ListViewItem = ListView1.Items.Add(dic("项目类型"))
For Each key As String In dic.Keys
item.SubItems.Add(dic(key))
Next
Next
End Sub
End Class
运行结果如图
首先点击读取文件,然后点击获取信息


浙公网安备 33010602011771号