サーバー環境をあるネットワークから別のネットワークに移行しています。ネットワークは完全に分離されており、お互いを見ることができません。現在の運用ファイル サーバー上のファイルと将来の運用ファイル サーバー上のファイルを比較するプログラムを作成しています。
プログラムは以下をリストする必要があります。
- 現在の本番サーバーから将来のサーバーに欠落しているファイル
- 本番サーバーからの将来のサーバーで古いファイル
私が思いついた最も簡単な方法は、各フォルダーを参照し、すべてのファイルとフォルダーを保持するオブジェクトを作成するプログラムを作成することでした。次に、その構造を取得して XML 形式にシリアル化しました。最終的に、各サーバー上のすべてのファイルとフォルダーを含む 2 つのファイルが作成されます。
私の問題は、2 つのファイルを比較して不一致を確認する簡単な方法が必要だということです。私が考えた方法は、現在の運用 XML ファイルをオブジェクトに逆シリアル化し、各ファイル/フォルダーのチェックをループして、ファイルが将来の運用サーバーに存在するかどうかを確認することです。
各ファイルを手動でループする以外に、2 つの XML ファイルを比較してどのオブジェクトが異なるかを確認する簡単な方法はありますか?
2 つのファイルを生成するために使用しているコードは次のとおりです。
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