我們正在將服務器環境從一個網絡遷移到另一個網絡。網絡完全分開,不能互相看到。我正在編寫一個程序,將我們當前生產文件服務器上的文件與我們未來生產文件服務器上的文件進行比較。比較XML文件夾數據的最佳方法
程序需要列出以下:
- 文件中,從目前的生產服務器
- 文件已經過時了,未來的服務器從我們的生產服務器未來的服務器丟失
我能想到的最快的方法是創建一個程序,瀏覽每個文件夾並創建一個對象來保存所有文件和文件夾。然後,我採用該結構並將其序列化爲XML格式。最終結果是我將有兩個文件包含每臺服務器上的所有文件和文件夾。
現在我的問題是,我需要一個簡單的方法來比較兩個文件,以查看任何差異。我想到的方法是將當前生產XML文件反序列化回對象,並循環遍歷每個文件/文件夾,檢查未來生產服務器上是否存在這些文件。
除了手動循環遍歷每個文件,還有一種比較兩個XML文件以查看哪些對象不同的更簡單的方法嗎?
這裏是我用來生成兩個文件的代碼:我最終通過我上面描述的方法解決這個
Imports System.IO
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim objFolder As New Folder
objFolder = GetFolder("FOLDER TO BROWSE")
Dim strObjects As String = SerializeObject(objFolder)
With New StreamWriter("Out Path")
.Write(strObjects)
End With
End Sub
Function GetFolder(ByVal strPath As String) As Folder
Dim objFolder As New Folder
For Each File In New DirectoryInfo(strPath).GetFiles
Dim oFile As New File
oFile.Name = File.Name
oFile.FullName = File.FullName
oFile.DateCreated = File.CreationTime
oFile.DateModified = File.LastWriteTime
objFolder.lstFiles.Add(oFile)
Next
For Each Folder In New DirectoryInfo(strPath).GetDirectories
objFolder.lstFolders.Add(GetFolder(Folder.FullName))
Next
Return objFolder
End Function
Public Shared Function SerializeObject(ByVal objToSerialize As Object) As String
Dim objXML As New Xml.Serialization.XmlSerializer(objToSerialize.GetType)
Dim sw As New IO.StringWriter()
objXML.Serialize(sw, objToSerialize)
Return sw.ToString()
End Function
Public Shared Function DeserializeObject(ByVal strSerializedObject As String, ByVal objType As Type) As Object
Dim objXML As New Xml.Serialization.XmlSerializer(objType)
Dim sr As New IO.StringReader(strSerializedObject)
Return CType(objXML.Deserialize(sr), Object)
End Function
End Class
<Serializable(), Xml.Serialization.XmlInclude(GetType(File))> _
Public Class Folder
Public lstFiles As New List(Of File)
Public lstFolders As New List(Of Folder)
End Class
<Serializable()> _
Public Class File
Public Name As String
Public FullName As String
Public DateCreated As String
Public DateModified As String
End Class
如果你認爲會有一些不同之處,可以安排的XML文件在同一順序的數據(除了差異),你可以使用[FC命令](http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/fc.mspx?mfr=true)。另外,當文件時間應該相同時,文件時間的實際可能性是什麼? –
我會將結果轉儲到數據庫中的2個不同表中,並編寫sql查詢以查找所有差異。除此之外,你只剩下像Beyond Compare這樣的文件比較工具來幫助你。 – Joe
你爲什麼不簡單地使用某種類型的vpn軟件,它應該能夠很容易地對目錄進行比較,以便監聽哪些可以自由流通的常用工具?順便說一下,你不需要惹惱你自己的問題。系統會自動通知您每條評論或評論。 – rekire