สวัสดีและยินดีต้อนรับกลับ
ในการบรรยายครั้งนี้ ฉันอยากจะพูด เกี่ยวกับการวางตำแหน่งไฟล์ โดยทั่วไปแล้วฟังก์ชันบางอย่างที่จะช่วยให้คุณ
เพื่อเปลี่ยนตำแหน่งของไฟล์
ดังนั้นสำหรับแอปพลิเคชันมากมาย คุณกำลังจะไป ต้องสามารถเข้าถึงข้อมูลในไฟล์อื่นที่ไม่ใช่ลำดับ
ลำดับขั้นเริ่มต้น ที่จุดเริ่มต้นและจากนั้นไปทีละไบต์จนถึงจุดสิ้นสุด
นั่นไม่ได้มีประโยชน์เสมอไปเพราะ คุณอาจต้องการเข้าไปตรงกลางของไฟล์และดึงข้อมูลหรือที่
จุดสิ้นสุดของไฟล์และดึงข้อมูล
ทุกอย่างขึ้นอยู่กับแอปพลิเคชัน
ไม่ค่อยอยากไป ตั้งแต่ต้นจนจบ
จึงมีหลากหลายฟังก์ชั่น ที่คุณสามารถใช้เพื่อเข้าถึงข้อมูลในลำดับแบบสุ่ม
มีสองด้าน ของการจัดตำแหน่งไฟล์
หนึ่งคือการหาที่ที่คุณ อยู่ในไฟล์และอีกไฟล์หนึ่งกำลังย้ายไปยังจุดที่กำหนดในไฟล์
นั่นคือสองสิ่งที่คุณจริงๆ ต้องการทราบว่าคุณกำลังพูดเกี่ยวกับไฟล์และตำแหน่งของ
a . เมื่อใด ไฟล์ที่มันชี้ไปจริงๆ
อีกครั้งที่คุณอยู่ในไฟล์ ตัวเองและคุณต้องการย้ายไปที่อื่นในไฟล์หรือไม่
เพื่อให้ท่านสามารถเข้าถึงไฟล์ได้ที่ ตำแหน่งสุ่มไม่ว่าคุณจะเปิดไฟล์หรือไม่
คุณสามารถย้ายพันธมิตรไฟล์ของคุณ
ไม่ต้องเปิด ไฟล์เพื่อเปลี่ยนตำแหน่งที่คุณจะเปลี่ยนดูว่าคุณอยู่ที่ไหน
เพื่อค้นหาว่าคุณอยู่ที่ไหน เราจะพูดถึงเรื่องแรก
คุณมีสองหน้าที่ในการค้นหา ว่าคุณอยู่ที่ไหนในไฟล์หนึ่ง
เรียกว่า ftel และหนึ่งคือ เรียกว่า fgetpos ตำแหน่ง fget
สำหรับ ftell ฟังก์ชันจริง คำจำกัดความค่อนข้างตรงไปตรงมา
คุณกลับมาพร้อมและ คุณใช้ตัวชี้ไฟล์
และฟังก์ชั่นนี้กำลังจะยอมรับ ตัวชี้ไฟล์เป็นอาร์กิวเมนต์และจะส่งกลับจำนวนเต็มยาว
ค่าที่ระบุตำแหน่งอักขระในไฟล์จึงเท่ากับ จะมาบอกตำแหน่ง
คุณสามารถใช้ได้โดยการสร้าง a ตัวแปรในกรณีนี้คือ fpos ซึ่งจะไปถึงสิ่งที่จะได้
ส่งคืนแล้วส่งผ่านตัวชี้ไฟล์นั้นและเรียก
ftel
ตัวแปรตำแหน่ง f ตอนนี้ถือ ตำแหน่งปัจจุบันในไฟล์และคุณสามารถใช้เพื่อกลับไปที่
ตำแหน่งในเวลาต่อมา
ดังนั้นมันจะกลับคุณ fposition
นี่คือวิธีที่คุณจะได้รับ ตำแหน่งของจุดปัจจุบันที่คุณชี้ไป
ค่าคือออฟเซ็ตเป็นไบต์ จากจุดเริ่มต้นของไฟล์.
ดังนั้น ftell ตรงไปตรงมามากเพื่อ ใช้ pass ในตัวชี้ของคุณ
มันจะกลับมาและบอกคุณว่าคุณอยู่ที่ไหน อยู่ในไฟล์ของคุณโดยพื้นฐานตั้งแต่ต้นไฟล์จนถึง
กี่ไบต์จากจุดเริ่มต้น
ในตัวอย่างนี้ เรากำลังสร้าง ตัวชี้ไฟล์ชื่อ fp และเรากำลังสร้างจำนวนเต็มที่เรียกว่า
length
เราจะเปิดไฟล์ และนี่จะเป็นเพียงการอ่านเท่านั้น
เรากำลังจะทำให้ แน่ใจว่าไม่ใช่โมฆะ
ถ้าเป็นเราจะไป เพื่อส่งคืนข้อผิดพลาด
แล้วไม่ต้องกังวลเรื่อง fseek
fseek กำลังจะไปแล้วจริงๆ เพื่อไปยังจุดสิ้นสุดของไฟล์
เป็นอีกหน้าที่หนึ่งที่ช่วยเราได้
ฉันใช้มันเพื่อ แสดงให้เห็นถึง ftel
Fseek กำลังจะไปให้สุด ของไฟล์ แล้วคุณกำลังจะพูดว่า
ftell fp และนั่นจะเป็น เพื่อบอกคุณโดยพื้นฐานแล้วคุณจะต้องอยู่ท้ายไฟล์
ดังนั้นลิงค์ที่ส่งคืน อยู่ท้ายไฟล์
และสิ่งที่จะเกิดขึ้นก็คือ มันจะคืนค่าขนาดทั้งหมดของไฟล์ตามความยาว
เพราะคุณย้ายตัวชี้ของคุณไปที่จุดสิ้นสุดแล้วคุณ บอกว่าฉันอยู่ที่ไหนและมันบอกว่าเธออยู่ที่จุดสิ้นสุด ดังนั้นจงคืนจุดสิ้นสุด
และท้ายสุดคือเลขของ ไบต์จากเวลาที่คุณอ่านครั้งล่าสุด
มาดูข้างในกันดีกว่า ของ IDE ที่ดีของเรา บล็อกโค้ดของเรา
นี่คือตัวอย่างโค้ดของเรา ที่เราสร้างตัวชี้ไฟล์ของเรา
เราตั้งค่าเป็น null ทำให้ แน่ใจว่าไม่ใช่โมฆะ
เราลองเปิดใจดู
จากนั้นเราก็ทำการ fseek ซึ่งเป็นเพียง กำลังจะเปลี่ยนตัวชี้ไฟล์ของเรา
เฟทเทลกำลังจะมาบอกเรา ที่เรากำลังชี้ไป
มันจะชี้ไปที่ end และมันจะเป็นจำนวนไบต์ต่อท้าย
เมื่อเราดำเนินการนี้ สิ่งที่คุณกำลังจะทำ สังเกตว่ามันแสดง 24 ไบต์
นั่นหมายความว่าคุณอยู่ที่จุดสิ้นสุดของ เนื่องจากไฟล์เป็นไฟล์ขนาดเล็ก
และไฟล์มีขนาดเพียง 24 ไบต์
โดยปกติ คุณจะใช้ ftel after คุณได้เขียนหรืออ่านหรือหลังจากที่คุณเขียนแล้วใน
fseek ที่คุณย้ายไปที่ไหนสักแห่ง
แต่มันง่ายมากที่จะเรียก ftel ด้วยตัวชี้ไฟล์แล้ว
len ก็บอกคุณว่าคุณอยู่ที่ไหน
คุณสามารถใช้fget ตำแหน่งหรือฟังก์ชัน fgetpos
และนี่คือฟังก์ชันที่สอง ให้ข้อมูลเกี่ยวกับตำแหน่งไฟล์ปัจจุบัน
อีกนิดเดียวเท่านั้น ซับซ้อนกว่า ftel
นี้ส่งกลับจำนวนเต็ม
มันใช้ตัวชี้ไฟล์และมัน ยังรับตำแหน่ง f t ประเภท
ดังนั้นพารามิเตอร์แรกคือ ตัวชี้ไฟล์นั้น เพื่อให้คุณรู้ว่าต้องอ่านไฟล์ใด
พารามิเตอร์ที่สองเป็นตัวชี้ไปที่a ประเภทที่กำหนดไว้ในมาตรฐาน ชม.
ประเภท f ตำแหน่ง t สามารถ บันทึกทุกตำแหน่งภายในไฟล์
ดังนั้นฟังก์ชันตำแหน่ง fget คือ ออกแบบมาเพื่อใช้เมื่อฟังก์ชันกำหนดตำแหน่ง
fset ตำแหน่ง
ดังนั้นคุณใช้ตำแหน่ง fset และ จากนั้นคุณใช้ตำแหน่ง fget
ร่วมกับสิ่งนั้น
ดังนั้นฟังก์ชันตำแหน่ง fget เก็บข้อมูลตำแหน่งปัจจุบันและข้อมูลสถานะไฟล์สำหรับไฟล์
และตำแหน่งและคืนค่าศูนย์หากการดำเนินการสำเร็จ ให้คืนค่า
a ค่าจำนวนเต็มที่ไม่ใช่ศูนย์สำหรับความล้มเหลว
เพื่อให้คุณสามารถสร้าง ตัวแปรของประเภทตำแหน่ง
และที่นี่เราบอกว่ามันอยู่ที่นี่เท่านั้น
จากนั้นเราเรียกตำแหน่ง fget
เราระบุในตัวชี้ไฟล์ของเราและ เราระบุในประเภทตำแหน่ง f ของเรา
เราต้องผ่านเครื่องหมายและ the ที่อยู่ของเพราะไม่ใช่ตัวชี้
ดังนั้นในกรณีนี้กระแส ตำแหน่งไฟล์อยู่ในตัวแปรสวัสดีหรือที่นี่
ดังนั้นคุณต้องประกาศตัวแปร ประเภท f ตำแหน่ง t เพราะนั่นคือสิ่งที่คุณผ่านในของคุณ
พารามิเตอร์ พารามิเตอร์ที่สองของคุณ
คุณสามารถประกาศตัวชี้ของ พิมพ์ f ตำแหน่ง t star เพราะจะไม่มีความทรงจำ
ที่เกี่ยวข้องกับการจัดเก็บข้อมูลตำแหน่ง
มาดูตัวอย่างกัน นี้จะสมเหตุสมผลมากขึ้น
ในกรณีนี้ เราสร้างไฟล์ของเรา ตัวชี้ เราสร้าง f ครอบครอง t
ตำแหน่งประเภทเราเรียกว่า open แล้วเรียกตำแหน่ง fget
และเราผ่านในไฟล์ของเรา ตัวชี้ในตำแหน่งสิ้นสุดของเรา
นั่นคือที่ที่เราอยู่ เก็บตำแหน่ง.
เราจะได้ ตำแหน่งที่เราอยู่
แล้วเมื่อเราพูดว่า f ใส่ s, เรากำลังเขียนข้อมูลบางส่วนไปทุกที่ที่เราย้ายไป
ดังนั้นอีกครั้ง f รับตำแหน่งและ ftell บอกคุณว่าคุณต้องการเขียนหรืออ่านจากที่ใด
มันอยู่ตรงกลาง
มันไม่ได้อยู่ที่จุดเริ่มต้น, มันไม่ได้อยู่ที่จุดสิ้นสุด
คุณกำลังเคลื่อนไหว
คุณมักจะเคลื่อนไหวด้วยการแสวงหา หรือย้ายของคุณกับอย่างอื่นรับตำแหน่งและที่
บอกคุณว่าคุณอยู่ที่ไหน
ดังนั้นตำแหน่ง fget และ ftell คือ จะบอกคุณตรง ๆ ว่าคุณกำลังชี้ไปที่ใด
และนั่น หมายความว่าคุณสามารถย้ายไปที่อื่นและคุณจะสามารถอ่านได้
ตอนนี้กำหนดตำแหน่งใน a จนถึงตอนนี้เราแค่กำลังอ่านว่าเราอยู่ที่ไหน
เราจะไม่อ่านจริงๆ ในที่ที่เราอยู่ เว้นแต่เราจะตั้งค่าบางอย่าง
เราก็อ่านและเขียน
เพื่อเป็นการเติมเต็มให้กับ ftell คุณมี fseek ด้วย
และ fseek จะช่วยให้คุณ ย้ายไปที่ใดที่หนึ่งสำหรับตำแหน่งของคุณ
มันส่งกลับค่า int
ส่งคืนตัวชี้ไฟล์แบบยาว fset และจำนวนเต็มดั้งเดิม
พารามิเตอร์แรกคือตัวชี้ ไปยังไฟล์ที่คุณกำลังเปลี่ยนตำแหน่ง
พารามิเตอร์ที่สองและสามกำหนด ที่คุณต้องการไปในไฟล์.
พารามิเตอร์ที่สองคือ an ออฟเซ็ตที่จุดอ้างอิงที่ระบุโดยพารามิเตอร์ที่สาม
จุดอ้างอิงสามารถเป็นหนึ่งได้ ของค่าสามค่าที่คุณระบุโดยชื่อที่กำหนดไว้ล่วงหน้า
แสวงหาการตั้งค่า แสวงหาปัจจุบัน และแสวงหาจุดจบ
Seek set กำหนด จุดเริ่มต้นของไฟล์.
Seek cur กำหนดปัจจุบัน ตำแหน่งในไฟล์และค้นหาจุดสิ้นสุด
กำหนดจุดสิ้นสุดของไฟล์
ดังนั้นสำหรับไฟล์โหมดข้อความ อาร์กิวเมนต์ที่สองต้องเป็นค่าที่ส่งคืนโดย
ftel
ดังนั้นคุณควรสังเกตว่าด้วย fseek และ ftel พวกเขาใช้ร่วมกัน
อาร์กิวเมนต์ที่สามสำหรับ text ไฟล์โหมดจะต้องค้นหาชุด
สำหรับไฟล์ข้อความ การดำเนินการทั้งหมด ด้วย fseek จะดำเนินการโดยอ้างอิงถึงจุดเริ่มต้นของ
ไฟล์สำหรับไฟล์ไบนารีที่เรายังไม่ได้เรียนรู้มากนัก
แต่สำหรับไฟล์ไบนารี the อาร์กิวเมนต์ offset เป็นเพียงจำนวนไบต์สัมพัทธ์
คุณจึงสามารถจัดหา ค่าบวกหรือค่าลบสำหรับออฟเซ็ตเมื่อการอ้างอิง
จุดถูกระบุเป็นขอ cur
ลองมาดูตัวอย่างกัน
ในตัวอย่างนี้ อีกครั้งเราทำ fputs
ดังนั้นเราจึงเขียนข้อมูลบางส่วนไปที่ .ของเรา ไฟล์แล้วเราใช้ fseek
Fseek กำลังจะย้ายคุณ
นี่กำลังบอกว่าคุณ จะย้ายเจ็ดไบต์และเราใช้ชุดการแสวงหาเพื่อบอกว่าเราต้องการ
เพื่อย้ายที่ใดที่หนึ่งโดยพื้นฐานเจ็ดไบต์จากจุดเริ่มต้น
และเราสามารถย้ายจาก จุดเริ่มต้นของไฟล์โดยเจ็ดไบต์ที่จะย้าย
หลังจากเจ็ดไบต์ เราก็สามารถทำได้ จริง ๆ แล้วเขียนข้อมูลลงไป
และเราก็จะสามารถ ใช้ ftell เพื่อดูว่าโอ้หลังจากเจ็ดไบต์ที่เราอยู่
คุณสามารถใช้ข้อมูลเพื่อ ดึงกลับจากที่ที่คุณอยู่
อีกครั้งจุดรวมของ fseek และ fgets คือคุณกำลังเห็นว่าคุณอยู่ที่ไหนเพื่อระบุ
ที่คุณต้องการเขียนหรืออ่าน
ดังนั้น fseek s กำลังจะไป ย้ายตำแหน่ง บอกกำลังจะบอกคุณว่าคุณอยู่ที่ไหน
ตำแหน่ง Fset ก็เหมือนกับ fseek
แต่ตำแหน่ง fset คือ a ซับซ้อนขึ้นเล็กน้อย
มันจะไปกับตำแหน่ง fset
ดังนั้น fset รับตำแหน่งก็เช่นกัน คล้ายกับตำแหน่ง fset มาก
ด้วยตำแหน่ง fset มัน ระบุพารามิเตอร์แรกเป็นตัวชี้ไปยังไฟล์ที่เปิดอยู่
พารามิเตอร์ที่สองคือ a ตัวชี้ของตำแหน่ง f t ประเภท
ตำแหน่งที่เก็บไว้ ตามที่อยู่นั้นได้มาโดยมีตำแหน่ง
fget
ดังนั้นตำแหน่ง fset จึงมีไฟล์ของคุณ ตัวชี้แล้วตัวแปรจริงของคุณ
และตัวแปรตรงนี้คือก่อนหน้านี้ กำหนดโดยการโทรไปยังตำแหน่ง fget
อีกครั้งที่คุณจะใช้ fset และ fget เข้าด้วยกัน
ตำแหน่ง fset ส่งกลับค่า a ค่าที่ไม่ใช่ศูนย์ในข้อผิดพลาดหรือศูนย์เมื่อสำเร็จ
ฟังก์ชันนี้ได้รับการออกแบบ เพื่อทำงานกับค่าที่ส่งคืนโดยตำแหน่ง
fget
ดังนั้นคุณสามารถใช้มันเพื่อไปที่a .เท่านั้น ตัวเลขในไฟล์เพื่อให้ได้ตำแหน่งในไฟล์ที่คุณเคยไปมาก่อน
Fseek ช่วยให้คุณไปที่ใดก็ได้ ตำแหน่งเพียงแค่ระบุออฟเซ็ตที่เหมาะสม
ที่นี่เราดูเหมือนเรามี ตำแหน่ง f ของเรา ตำแหน่งประเภท t
เราเปิดไฟล์ของเราและ จากนั้นเราเรียกตำแหน่ง fget
ในตำแหน่ง fget เรากำลังระบุ ที่เราต้องการย้ายตัวชี้
ที่เราอยู่จริง การอ่านหรือเขียนในไฟล์
จากนั้นเราก็ใช้ fputs เพื่อ ทุกที่ที่เราย้ายไป
แล้วตำแหน่ง fset จะไปที่ ตั้งค่าบางอย่างเฉพาะที่เราต้องการเขียนอีกครั้งแล้ว
เขียนจากทุกที่ที่เราต้องการ
ด้วยฟังก์ชันทั้งหมดนี้ คุณต้องการดูว่าคุณกำลังชี้ไปที่ใด
นี่จะกลายเป็นวิธีที่ง่ายขึ้นเพื่อ เข้าใจเมื่อเรามีความท้าทายของเรา
ด้วยการอ่านและเขียน คุณ ต้องการย้ายไปที่ไหนสักแห่งจนถึงจุดที่คุณกำลังเขียนถึงอยู่เสมอ
คุณไม่ต้องการที่จะเขียนเสมอไป สำหรับจุดเริ่มต้นหรือจุดสิ้นสุด
ดังนั้นฟังก์ชันเหล่านี้จึงดีมาก มีประโยชน์ในการย้ายตำแหน่งที่คุณต้องการวางตำแหน่งใดก็ได้ในไฟล์
ขอขอบคุณ