คำถามติดแท็ก file-handling

การจัดการไฟล์หมายถึงชุดเครื่องมือฟังก์ชันและไลบรารีเพื่อทำงานกับไฟล์และที่จับไฟล์ การสร้างเขียนต่อท้ายย้ายและลบไฟล์อยู่ในโดเมนนี้

12
มันเป็นการปฏิบัติที่ไม่ถูกต้องหรือไม่ที่จะเก็บไฟล์ขนาดใหญ่ (10 MB) ไว้ในฐานข้อมูล?
ขณะนี้ฉันกำลังสร้างเว็บแอปพลิเคชันที่อนุญาตให้ผู้ใช้จัดเก็บและแชร์ไฟล์ขนาด 1 MB - 10 MB สำหรับฉันแล้วดูเหมือนว่าการจัดเก็บไฟล์ในฐานข้อมูลจะทำให้การเข้าถึงฐานข้อมูลช้าลงอย่างมาก นี่เป็นข้อกังวลที่ถูกต้องหรือไม่? ควรเก็บไฟล์ไว้ในระบบไฟล์และบันทึกชื่อไฟล์และพา ธ ในฐานข้อมูลหรือไม่? มีแนวทางปฏิบัติที่ดีที่สุดเกี่ยวกับการจัดเก็บไฟล์เมื่อทำงานกับฐานข้อมูลหรือไม่? ฉันทำงานใน PHP และ MySQL สำหรับโครงการนี้ แต่เป็นปัญหาเดียวกันสำหรับสภาพแวดล้อมส่วนใหญ่ ( Ruby on Rails , PHP , .NET ) และฐานข้อมูล (MySQL, PostgreSQL )

8
ความแตกต่างระหว่าง '\ n' และ '\ r \ n'
ใช่ใช่ผมทราบว่า'\n'เขียนขึ้นบรรทัดใหม่ในระบบปฏิบัติการยูนิกซ์ในขณะที่สำหรับ Windows '\r\n'มีลำดับสองตัวอักษร: ทั้งหมดนี้เป็นสิ่งที่ดีมากในทฤษฎี แต่คำถามของฉันคือทำไม ? เหตุใดอักขระการคืนตลับหมึกจึงมีความพิเศษใน Windows หาก UNIX สามารถทำได้ในกรณีที่\nใช้ Windows สองตัวเพื่อทำสิ่งนี้ ฉันกำลังอ่านหนังสือ Python ของ David Beazley และเขาพูดว่า: ตัวอย่างเช่นบน Windows การเขียนตัวอักษร '\ n' จริง ๆ แล้วจะส่งออกลำดับสองตัวอักษร '\ r \ n' (และเมื่ออ่านไฟล์กลับมา '\ r \ n' จะถูกแปลกลับเป็น '\ n' เดียว ตัวอักษร) ทำไมต้องใช้ความพยายามพิเศษ ฉันจะซื่อสัตย์ ฉันรู้จักความแตกต่างมาเป็นเวลานาน แต่ไม่เคยใส่ใจที่จะถามว่าทำไม ฉันหวังว่าจะได้รับคำตอบในวันนี้ ขอบคุณที่สละเวลา.

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

5
ฉันควรส่งผ่านชื่อไฟล์เพื่อเปิดหรือเปิดไฟล์หรือไม่
สมมติว่าฉันมีฟังก์ชั่นที่ทำงานกับไฟล์ข้อความตัวอย่างเช่นอ่านจากมันและลบคำว่า 'a' ฉันสามารถผ่านชื่อไฟล์และจัดการเปิด / ปิดในฟังก์ชั่นหรือฉันจะผ่านมันไฟล์ที่เปิดอยู่และคาดหวังว่าใครก็ตามที่เรียกมันจะจัดการกับการปิดมัน วิธีแรกดูเหมือนจะเป็นวิธีที่ดีกว่าในการรับประกันว่าไม่มีไฟล์ใดถูกเปิดทิ้งไว้ แต่ป้องกันไม่ให้ฉันใช้สิ่งต่าง ๆ เช่นวัตถุ StringIO วิธีที่สองอาจเป็นอันตรายเล็กน้อย - ไม่มีทางรู้ว่าไฟล์จะถูกปิดหรือไม่ แต่ฉันจะสามารถใช้วัตถุเหมือนไฟล์ def ver_1(filename): with open(filename, 'r') as f: return do_stuff(f) def ver_2(open_file): return do_stuff(open_file) print ver_1('my_file.txt') with open('my_file.txt', 'r') as f: print ver_2(f) เป็นที่ต้องการโดยทั่วไปหรือไม่ โดยทั่วไปแล้วคาดว่าฟังก์ชั่นจะทำงานในหนึ่งในสองวิธีนี้หรือไม่? หรือควรมีการบันทึกไว้อย่างดีเพื่อให้โปรแกรมเมอร์สามารถใช้ฟังก์ชั่นได้ตามความเหมาะสม?

3
ประโยชน์ของการเขียนไปยังตำแหน่งชั่วคราวคืออะไรแล้วคัดลอกไปยังปลายทางที่ต้องการ
ฉันกำลังเขียนแอปพลิเคชันที่ทำงานกับภาพถ่ายดาวเทียมและเจ้านายของฉันขอให้ฉันดูแอปพลิเคชั่นเชิงพาณิชย์บางส่วนและดูว่ามันทำงานอย่างไร ฉันพบพฤติกรรมแปลก ๆ และเมื่อฉันมองฉันก็พบว่ามันอยู่ในแอปพลิเคชันมาตรฐานอื่น ๆ เช่นกัน โปรแกรมเหล่านี้ก่อนเขียนไปยังโฟลเดอร์ temp แล้วคัดลอกไปยังปลายทางที่ต้องการ ตัวอย่าง: 7zip แรกแยกไปยังโฟลเดอร์ temp แล้วคัดลอกข้อมูลที่แยกแล้วไปยังตำแหน่งที่คุณได้ขอให้แยกข้อมูลไป ฉันเห็นปัญหาหลายประการด้วยวิธีนี้: โฟลเดอร์ temp อาจมีพื้นที่ไม่เพียงพอในขณะที่ตำแหน่งที่ตั้งใจไว้อาจมีพื้นที่ว่างจำนวนมาก หากเป็นไฟล์ขนาดใหญ่อาจต้องใช้เวลาในการดำเนินการคัดลอก ฉันคิดเกี่ยวกับมันมาก แต่ฉันไม่เห็นจุดบวกเดียวที่จะทำสิ่งนี้ ฉันทำบางสิ่งหายไปหรือมีประโยชน์อย่างแท้จริงในการทำสิ่งนี้หรือไม่?

4
การใช้ไฟล์แฟลตเทียบกับฐานข้อมูล / API เป็นการขนส่งระหว่างส่วนหน้าและส่วนหลัง
ฉันมีแอปพลิเคชั่นที่สร้างการสนทนาที่ค่อนข้างร้อนแรงระหว่างนักพัฒนาสองคน โดยทั่วไปจะแบ่งเป็นเลเยอร์เว็บและเลเยอร์แบ็กเอนด์ เลเยอร์เว็บรวบรวมข้อมูลโดยแบบฟอร์มเว็บอย่างง่ายหยุดข้อมูลนี้เป็นเอกสาร JSON (แท้จริงไฟล์. json) ลงในโฟลเดอร์เฝ้าดูที่ใช้โดยส่วนหลัง ส่วนหลังทำการสำรวจโฟลเดอร์นี้ทุกสองสามวินาทีหยิบไฟล์ขึ้นมาและทำหน้าที่ของมัน ตัวไฟล์เองนั้นง่ายมาก (เช่นข้อมูลสตริงทั้งหมด, ไม่มีการซ้อน), และประมาณ 1-2k ที่ใหญ่ที่สุด, โดยระบบใช้เวลาส่วนใหญ่ในการใช้งาน (แต่การกระจายข้อความสูงสุด 100 ข้อความในเวลาใดก็ตาม) ขั้นตอนการประมวลผลส่วนหลังใช้เวลาประมาณ 10 นาทีต่อข้อความ ข้อโต้แย้งเกิดขึ้นเมื่อผู้พัฒนารายหนึ่งแนะนำว่าการใช้ระบบไฟล์เป็นเลเยอร์การส่งข้อความเป็นวิธีแก้ปัญหาที่ไม่ดีเมื่อบางสิ่งเช่นฐานข้อมูลเชิงสัมพันธ์ (MySQL), ฐานข้อมูล noSQL (Redis) หรือแม้แต่การเรียก REST API ธรรมดาควรใช้แทน ควรสังเกตว่า Redis ถูกใช้ที่อื่นในองค์กรสำหรับการจัดการข้อความที่อยู่ในคิว ข้อโต้แย้งที่ฉันได้ยินแตกออกเป็นดังนี้ ในความโปรดปรานของไฟล์แบน: ไฟล์แบบเรียบมีความน่าเชื่อถือมากกว่าโซลูชันอื่น ๆ เนื่องจากไฟล์จะถูกย้ายจากโฟลเดอร์ "เฝ้าดู" ไปยังโฟลเดอร์ "กำลังดำเนินการ" หลังจากที่รับแล้วและท้ายที่สุดไปยังโฟลเดอร์ "เสร็จสิ้น" เมื่อเสร็จสิ้น ไม่มีความเสี่ยงของข้อความที่จะหายไปยกเว้นข้อผิดพลาดในระดับต่ำมากซึ่งจะทำลายสิ่งอื่น ๆ อย่างไรก็ตาม ไฟล์แบบแฟลตต้องการความซับซ้อนทางเทคนิคที่น้อยกว่าในการทำความเข้าใจ - เพียงแค่catมัน …

1
ฉันจะทดสอบโปรแกรมอ่านไฟล์ได้อย่างไร
ฉันกำลังทำงานในโครงการที่มีรูปแบบไฟล์ไม่กี่รูปแบบ รูปแบบบางรูปแบบถูกระบุโดย. xsds รูปแบบอื่น ๆ โดยใช้เอกสารประกอบในเว็บไซต์ที่เกี่ยวข้องและบางรูปแบบเป็นรูปแบบภายในที่กำหนดเองที่ไม่มีเอกสารประกอบ Mwahahahaha มีปัญหาอะไร? ฉันต้องการทดสอบตัวอ่านไฟล์ของฉัน แต่ฉันไม่แน่ใจว่าจะทำสิ่งนี้ได้อย่างไร การไหลของแอพลิเคชันเป็นเช่นนี้: file.___ ===> read by FileReader.java ===> which creates a Model object ที่FileReaderอินเตอร์เฟซอยู่ public interface FileReader { public Model read(String filename); } กระบวนการModelมีจำนวนของคุณสมบัติที่บรรจุเมื่ออ่านไฟล์ มันดูเหมือนอะไร public class Model { List<String> as; List<String> bs; boolean isAPain = true; // ... } ฉันลองทำอะไร …

7
จำเป็นต้องอ่านทุก ๆ ไบต์เพื่อตรวจสอบว่าไฟล์ที่คัดลอกนั้นเหมือนต้นฉบับหรือไม่?
ฉันเพิ่งเรียนรู้เกี่ยวกับโปรแกรมที่เรียกว่า Total Commander เป็นการแทนที่ Windows Explorer และมีของตัวเองเพื่อคัดลอกไฟล์ ในการตรวจสอบว่าไฟล์เหมือนกันหรือไม่แทนที่จะคำนวณ CRC จะตรวจสอบทุกไบต์อย่างแท้จริงทีละตัวทั้งบนต้นฉบับและสำเนา คำถามของฉันคือ: จำเป็นหรือไม่ CRC หรือเทคนิคอื่นใดผิดพลาดหรือไม่ ในฐานะโปรแกรมเมอร์คุณควรลองใช้ระบบที่สมบูรณ์แบบ แต่ช้าหรือสุดยอดมากเกินไปหรือไม่?

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

5
แนวปฏิบัติที่ดีที่สุดสำหรับการตั้งชื่อรูปภาพที่อัปโหลดคืออะไร
สมมติว่าฉันมีแบบฟอร์มในเว็บแอปพลิเคชันซึ่งผู้ใช้สามารถอัปโหลดรูปโปรไฟล์ ฉันมีข้อกำหนดเล็กน้อยเกี่ยวกับขนาดไฟล์ขนาดและอื่น ๆ แต่เมื่อผู้ใช้อัปโหลดภาพฉันจะตั้งชื่อพวกเขาในระบบของฉันได้อย่างไร ฉันคิดว่ามันจะต้องมีความสอดคล้องและไม่ซ้ำกัน อาจเป็น GUID หรือไม่? a5c627bedc3c44b7ae7c06a44fb3fcf8.jpg การประทับเวลา? 129899740140465735.jpg แฮช เช่น md5 b1a9acaf295cf14ffbc5b6538294562c.jpg มีวิธีมาตรฐานหรือแนะนำให้ทำเช่นนี้?

5
Test Driven Development: วิธีที่ดี / เป็นที่ยอมรับในการทดสอบการทำงานของระบบไฟล์?
ฉันกำลังทำงานในโครงการในขณะนี้ที่สร้างตาราง (เหนือสิ่งอื่นใด) ตามเนื้อหาของระบบไฟล์และในทางกลับกันก็จะทำการแก้ไข meta-data บางอย่างในสิ่งที่พบ คำถามคือจะเขียนการทดสอบรอบนี้หรือตั้งค่าอย่างไร มีวิธีง่าย ๆ ในการเยาะเย้ยเรื่องนี้หรือไม่? หรือฉันควรตั้ง "กล่องแซนด์บ็อกซ์"?

1
ทำไมทุกคนจะใช้ข้อมูลหลายส่วน / แบบฟอร์มสำหรับข้อมูลที่หลากหลายและการถ่ายโอนไฟล์?
ฉันทำงานใน C # และสื่อสารระหว่าง 2 แอพที่ฉันกำลังเขียน ฉันชอบ Web API และ JSON ตอนนี้ฉันมาถึงจุดที่ฉันกำลังเขียนกิจวัตรประจำวันเพื่อส่งบันทึกระหว่างเซิร์ฟเวอร์ทั้งสองที่มีข้อมูลตัวอักษรและไฟล์อยู่บ้าง ตามอินเทอร์เน็ตฉันควรใช้คำขอ multipart / form-data ตามที่แสดงที่นี่: ดังนั้นคำถาม "Multipart form จาก C # client" โดยทั่วไปคุณเขียนคำขอด้วยตนเองที่ตามรูปแบบดังนี้: Content-type: multipart/form-data, boundary=AaB03x --AaB03x content-disposition: form-data; name="field1" Joe Blow --AaB03x content-disposition: form-data; name="pics"; filename="file1.txt" Content-Type: text/plain ... contents of file1.txt ... --AaB03x-- คัดลอกมาจากRFC 1867 - …

3
การออกแบบที่ดีสำหรับการอนุญาตให้ใช้งานร่วมกันได้ของไฟล์ย้อนหลังระหว่างซอฟต์แวร์รุ่นต่างๆคืออะไร
การออกแบบที่ดีสำหรับการอนุญาตให้ใช้งานร่วมกันได้ของชนิดไฟล์ระหว่างซอฟต์แวร์รุ่นต่าง ๆ คืออะไร ตัวอย่างเช่น Microsoft จะรับ Word 2007, 2010 และ 2013 และอื่น ๆ ... ไปยังไฟล์ docx ที่เปิดอยู่ทั้งหมดได้อย่างไร แต่รุ่นที่แตกต่างกันสามารถบันทึกข้อมูลได้มากขึ้นและน้อยลงและบันทึกข้อมูลในรูปแบบที่แตกต่างกันเล็กน้อย ไฟล์ที่บันทึกในรุ่นหนึ่งสามารถเปิดได้ในอีกรุ่นหนึ่ง แต่องค์ประกอบบางอย่างของไฟล์อาจไม่สามารถใช้งานได้ในเวอร์ชั่นที่เก่ากว่า ฉันหมายความว่าวิธีที่ชัดเจนจริงๆที่จะมีบางอย่าง private string openfile(string filename) { File.Open(filename) ... some logic that gets a header from the file that will never change switch (fileversion) case 2007: ..... case 2010 ..... case …

3
การเขียนเมื่อเริ่มต้นไฟล์เป็นสิ่งที่คุณจะรู้ได้ในตอนท้าย
แบ็คกราวน์:ฉันกำลังเขียนรหัสคอนโทรลเลอร์ไมโครคอนโทรลเลอร์เพื่อเขียนไฟล์ EBML EBML เปรียบเสมือนไบนารี XML ที่มีองค์ประกอบซ้อนกัน แต่แทนที่จะเป็นแท็กเริ่มต้นและแท็กสิ้นสุดจะมี ID เริ่มต้นความยาวและข้อมูล ฉันกำลังเขียนสิ่งนี้ลงในแฟลชภายนอกในแอปพลิเคชันพลังงานต่ำดังนั้นฉันจึงต้องการให้แฟลชเข้าถึงน้อยที่สุด หน่วยความจำยังมี จำกัด เพราะไม่มีอะไรง่าย เมื่อฉันสามารถเก็บองค์ประกอบ EBML ทั้งหมดไว้ในหน่วยความจำจากนั้นสร้างเป็นเรื่องง่ายเพราะฉันสามารถย้อนกลับและเติมความยาวของแต่ละองค์ประกอบหลังจากที่ฉันรู้ว่าความยาวนั้นคืออะไร ปัญหาคือสิ่งที่ต้องทำเมื่อฉันไม่สามารถเก็บองค์ประกอบทั้งหมดไว้ในหน่วยความจำได้ ตัวเลือกที่ฉันเห็นคือ: เขียนสิ่งที่ฉันรู้แล้วย้อนกลับไปและเพิ่มความยาว (ง่ายที่สุด แต่เพิ่มการเข้าถึงแฟลชมากกว่าที่ฉันต้องการ) คำนวณความยาวของแต่ละองค์ประกอบก่อนเริ่มเขียน (ค่อนข้างง่าย แต่ใช้เวลาประมวลผลนาน) สลับโหมดเมื่อหน่วยความจำของฉันเต็มดังนั้นฉันจะดำเนินการต่อผ่านข้อมูล แต่เพียงเพื่อคำนวณความยาวขององค์ประกอบที่จองไว้แล้วในหน่วยความจำ จากนั้นเขียนสิ่งที่ฉันมีอยู่ในหน่วยความจำแล้วย้อนกลับไปประมวลผลข้อมูลต่อจากที่ค้างไว้ (ตัวเลือกที่ฉันชอบจนถึงตอนนี้) ให้องค์ประกอบความยาวกรณีสูงสุดหรือเลวร้ายที่สุดเมื่อพวกเขาต้องการที่จะเขียนและยังไม่ทราบความยาวสุดท้ายของพวกเขา (ง่ายกว่าด้านบน แต่อาจย้อนกลับและเสียพื้นที่) คำถาม:ดูเหมือนว่าสิ่งนี้น่าจะเป็นปัญหาที่คนทั่วไปคิดถึง ฉันรู้ว่ามันสามารถเกิดขึ้นได้เมื่อสร้าง data packets มีเทคนิคที่ดีขึ้น / มากกว่า / ที่ยอมรับมากกว่าฉันหายไปหรือเปล่า หรือเพียงแค่คำบางคำสำหรับปัญหาที่ฉันสามารถค้นหาได้

3
จะโหลดและจัดเก็บการตั้งค่าจากไฟล์ได้ที่ไหน
ฉันคิดว่าคำถามนี้ควรใช้กับโปรแกรมส่วนใหญ่ที่โหลดการตั้งค่าจากไฟล์ คำถามของฉันมาจากมุมมองการเขียนโปรแกรมและเป็นวิธีจัดการกับการโหลดการตั้งค่าจากไฟล์ในแง่ของคลาสและการเข้าถึงที่แตกต่างกัน ตัวอย่างเช่น หากโปรแกรมมีsettings.iniไฟล์อย่างง่ายเนื้อหาของมันควรจะโหลดในload()วิธีการเรียนหรือบางทีนวกรรมิก? ควรเก็บค่าไว้ในpublic staticตัวแปรหรือควรมีstaticวิธีรับและตั้งค่าคุณสมบัติหรือไม่ จะเกิดอะไรขึ้นหากไฟล์ไม่มีอยู่หรืออ่านไม่ได้? คุณจะให้โปรแกรมที่เหลือรู้ว่าไม่สามารถรับคุณสมบัติเหล่านั้นได้อย่างไร เป็นต้น ฉันหวังว่าฉันจะขอสิ่งนี้ในสถานที่ที่เหมาะสมที่นี่ ฉันต้องการตั้งคำถามให้เป็นผู้ไม่เชื่อเรื่องภาษามากที่สุด แต่ฉันมุ่งเน้นที่ภาษาที่มีสิ่งต่าง ๆ เช่นมรดกโดยเฉพาะ Java และ C # .NET

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