โปรแกรมซิงค์ส่วนใหญ่ตรวจสอบการเปลี่ยนแปลงไฟล์ได้อย่างไร


9

โปรแกรมซิงค์เช่น Dropbox มักจะติดตามการเปลี่ยนแปลงไฟล์โดยทำการเปรียบเทียบแบบไบต์ต่อไบต์หรือใช้แฮชหรือการใช้diff/ การเก็บบันทึกการกระทำในท้องถิ่นเช่นการควบคุมเวอร์ชันหรืออะไร

คำตอบ:


8

ใน Windows มีกลไกที่จะให้ระบบปฏิบัติการแจ้งเตือนคุณเมื่อมีการเปลี่ยนแปลงโครงสร้างไดเรกทอรี 'เฝ้าดู' - FindFirstChangeNotification () เมื่อระบุว่าไฟล์มีการเปลี่ยนแปลงแอปพลิเคชันสามารถไปเปรียบเทียบไฟล์ในไดเรกทอรีที่มีการเปลี่ยนแปลงเพื่อค้นหาไฟล์จริงที่มีการเปลี่ยนแปลงโดยดูที่ขนาดวันที่แก้ไขแฮช ฯลฯ

สิ่งนี้ (ดังที่ Michael ชี้ให้เห็นด้านล่าง) เป็นสิ่งที่แต่ละแพลตฟอร์มจะจัดหาให้ในบางลักษณะ ฉันไม่ได้บอกว่าสิ่งนี้เป็นลักษณะเฉพาะของ Windows


1
และยังมีความรู้แจ้งบน Linux
Michael

แต่จะเกิดอะไรขึ้นหากโปรแกรมซิงค์ไม่ทำงานในเวลาที่มีการเปลี่ยนแปลงไฟล์ มันจะไม่พลาดโอกาสในการได้รับแจ้งจากเบ็ด?
mcandre

คุณใช้ตัวอย่างเฉพาะของดรอปบ็อกซ์ซึ่งโดยทั่วไปจะทำงานในพื้นหลัง เห็นได้ชัดว่าหากโปรแกรมไม่ทำงานมันจะไม่ได้รับแจ้ง จากนั้นจะต้องใช้วิธีอื่น (อาจแก้ไขวันที่) ฉันไม่คิดว่าคุณจะได้คำตอบที่เป็นรูปธรรมเกี่ยวกับวิธีการเฉพาะที่ใช้อยู่เพราะโปรแกรมต่าง ๆ ทำสิ่งที่แตกต่างออกไป ดีกว่าที่จะถามผู้สร้างของโปรแกรมเฉพาะในคำถาม
GrandmasterB

@mcandre ค่อนข้างดีที่ GrandmasterB พูดไว้ - ถ้าคุณพลาดการแจ้งเตือนคุณต้องสแกนโฟลเดอร์ ขึ้นอยู่กับว่าคุณต้องการเป็น "ความถูกต้อง" อย่างไรซึ่งอาจหมายถึงเพียงแค่ค้นหาไฟล์ใหม่และเวลาประทับ / ขนาดไฟล์ที่แก้ไข (สิ่งเหล่านี้มีราคาไม่แพงนัก) หรือในกรณีที่เลวร้ายที่สุดเมื่อเปรียบเทียบไฟล์ทั้งหมด โปรแกรมเช่น rsync มักจะแฮชไฟล์เป็นกลุ่มดังนั้นการเปลี่ยนแปลงในช่วงต้นของข้อมูลสามารถตรวจพบได้ก่อนหน้านี้ แต่ในกรณีที่เลวร้ายที่สุด (ไฟล์เหมือนกัน) คุณจะต้องอ่านข้อมูลทั้งหมด
Daniel B

2

ในที่สุดการเปรียบเทียบไฟล์ที่คุณต้องการเปรียบเทียบทุกไบท์ - คุณจะสังเกตเห็นว่ามีการเปลี่ยนแปลงไบต์เดียวได้อย่างไร

ในความเป็นจริงคุณอ่านบล็อกของไบต์และคำนวณค่าแฮชจากนั้นตรวจสอบกับรายการของแฮช ตัวอย่างที่ดีคือ " rsync "

เท่าที่ฉันรู้ว่าดรอปบ็อกซ์จะทำซ้ำไฟล์ทั้งหมดเท่านั้นดังนั้นจะคำนวณแฮชของไฟล์ทั้งหมดเพื่อตรวจสอบไฟล์เดียวกัน


1
pst ในบางระบบไฟล์มีการแก้ไขวันที่
ratchet freak

1
การแฮ็กจะไม่สร้างความเสี่ยงเล็กน้อย แต่แท้จริงของการชนทำให้ไฟล์ไม่ถูกซิงค์หรือไม่ เห็นได้ชัดว่า Dropbox ใช้การใช้งานที่ต่างกัน dropbox.com/help/8/th
mcandre

1
@candre ที่ดูเหมือนว่ามันจะดีกว่าเป็นคำถามของตัวเอง
GrandmasterB

@ratchetfreak: การแก้ไขวันที่ในบางระบบอาจไม่น่าเชื่อถือสำหรับปัญหาประเภทนี้ การแตะอย่างง่ายจะทำให้วันที่แก้ไขแตกต่างกันซึ่งอาจไม่จำเป็นต้องทำการซิงค์
Steven Evers

1
@SnOrfus แล้วตรวจสอบการเปลี่ยนแปลงอีกครั้งเมื่อวันที่มีการเปลี่ยนแปลงได้รับการแก้ไข
วงล้อประหลาด

1

ตัวอย่างเช่น. NET มีคลาส FileSystemWatcher ฉันแน่ใจว่าภาษาระดับต่ำและรันไทม์อื่น ๆ สามารถให้ความสามารถที่คล้ายคลึง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.