Мы переносим серверные среды из одной сети в другую. Сети полностью разделены и не могут видеть друг друга. Я пишу программу, которая будет сравнивать файлы на нашем текущем файловом сервере с файлами на нашем будущем файловом сервере.Лучший способ сравнения данных папки 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). Кроме того, каковы шансы файловых файлов на самом деле быть одинаковыми, когда они должны быть одинаковыми? –
Я бы сбросил результаты на две разные таблицы в базе данных и написал sql-запросы, чтобы найти все различия. Помимо этого, вы можете использовать инструменты сравнения файлов, такие как Beyond Compare, чтобы помочь вам. – Joe
Почему бы вам просто не использовать какое-то программное обеспечение vpn, которое должно упростить компиляцию прослушиваний в каталогах, которые могут быть доступны для обычных инструментов? Кстати, вам не нужно разбираться в собственном вопросе. Вы будете уведомлены обо всех комментариях или ответах автоматически. – rekire