01/10/2018, 11:15

Làm thế nào để đọc, ghi file như một Database?

Chào mọi người.
Có ai biết làm thế nào để đọc, ghi file, giống nhưng một database bằng code, hay framework gì không chỉ mình với.
Ghi file như một Database có nghĩa là: Vd: như sửa một dòng trong file thì chỉ sửa dòng đó chứ không dọc hết file đó ra xong sửa, xong ghi đè dữ liệu vào file cũ

Cảm ơn.

Minh Hoàng viết 13:23 ngày 01/10/2018

Seek đến vị trí của row đó rồi replace thôi.

Vô Thin viết 13:15 ngày 01/10/2018

Một file không thôi, bản thân nó không cung cấp phương tiện/ cách thức để một chương trình đọc file biết “dòng cần sửa là dòng nào” nếu bạn không đọc tuần tự thì file bạn phải được sắp xếp theo trật tự nào đó (hoặc lập chỉ mục index) để định vị và nhảy ngay đến dòng N.

Do đó, không thể thực hiện được như cách vừa hỏi với một file bất kỳ, mà bản chất là phải đọc tuần tự lên, ghi ra file mới rồi xoá file cũ nếu không muốn ghi đè vào dữ liệu cũ.

Chính vì lý do như trên, người ta mới phải đẻ ra database để cung cấp phương tiện cho việc đọc / ghi thuận tiện hơn.

Phan Bá Hải viết 13:29 ngày 01/10/2018

Bạn có thể chọn SQLite, nó cũng là database nhưng ở dạng file (.db, .sqlite,…) Nhiều Language hỗ trợ SQLite
SQLite không cần attach vào db server, connectiong string chỉ cần trỏ đường dẫn file theo kiểu

jdbc:sqlite:<đường dẫn đến file db> //connection string cho JDBC
Chien Dang viết 13:28 ngày 01/10/2018

Trong C# winforms, bạn dùng BindingDataSource là có thể đáp ứng các yêu cầu của bạn.
Bạn cần tạo một lớp DAO (Data Access Object) gồm các thuộc tính của đối tượng bạn muốn lưu ra file, sau đó gán các giá trị cho các thuộc tính đó. File lưu lại các thuộc tính dưới dạng XML, và khi đọc, thêm, sửa, xóa nó sẽ làm việc với file xml đó bằng việc map các thuộc tính của đối tượng và trong file.
Ví dụ về class và file .xml mình nói trong bài:
File .cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace HDCG.Object
{
    public class Video
    {
        public int Layer { get; set; }
        public string VideoPath { get; set; }
        public bool Loop { get; set; }
    }
}

File xml:

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfVideo xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Video>
    <Layer>100</Layer>
    <VideoPath>logo1.tga</VideoPath>
    <Loop>false</Loop>
  </Video>
  <Video>
    <Layer>100</Layer>
    <VideoPath>youtv_logo_popup [70 px].mov</VideoPath>
    <Loop>false</Loop>
  </Video>
</ArrayOfVideo>

Chính vì lý do như trên, người ta mới phải đẻ ra database để cung cấp phương tiện cho việc đọc / ghi thuận tiện hơn.

Tất cả đều đồng ý ngoài câu này của @superthin, đẻ ra database ko hẳn là cung cấp phương tiện cho việc đọc ghi thuận tiện hơn đâu, thực tế là phức tạp hơn đấy chứ, còn phải connect, rồi query này nọ. Chỉ là nó phù hợp với các cơ sở dữ liệu lớn và có quan hệ phức tạp với nhau, cộng với việc flexible và cho phép nhiều thằng dùng cùng lúc mà ko gây xung đột thôi.

Tiến Nguyễn viết 13:17 ngày 01/10/2018

Thank you,
Nếu như mình không muốn dùng XML mà Json hay Gson Có tương tự không bạn. ???

Chien Dang viết 13:22 ngày 01/10/2018

Mình hay làm với xml, nhưng cũng có thư viện .Net hỗ trợ json đây:

newtonsoft.com

Json.NET - Newtonsoft

Json.NET is a popular high-performance JSON framework for .NET

Phan Bá Hải viết 13:16 ngày 01/10/2018

Database có thể rắc rối khi connect, nhưng nó lại là phương thức lưu trữ tuyệt vời với các đối tượng có mối quan hệ với nhau, thứ mà XML hay Json không thể có được. Và nếu dữ liệu lớn thì file xml . json cũng rất to (có khi đến hàng chục MB) còn db thì được tối ưu hơn chuyện lưu trữ
Bạn cũng không thể search trên json, xml. Bạn phải parse json, xml ra array rồi dùng hàm search, sort, rất dễ mất performance, việc update dữ liệu trên db luôn đơn giản hơn trên xml hay json
Ngoài ra khả năng query mạnh của SQL cũng là một lợi thế rất lớn
Nếu ứng dụng chỉ có 1 - 2 đối tượng, hoặc đối tượng đó quá nhỏ, không cần đến db như lưu trữ configuration của app thì json, xml là sự lựa chọn tuyệt vời. Còn lưu dữ liệu record lâu dài thì nên chọn db, nếu là app muốn lưu trữ offline thì SQLite là sự lựa chọn rất tốt vì tính di động của nó, mình cũng có nói ở comment trên
Không phải ngẫu nhiên mà app Android họ recommend lưu trữ trên SQLite thay vì tạo file xml, json

Tao Không Ngu. viết 13:23 ngày 01/10/2018

Hi Tiến Nguyễn.
Bạn có thể nêu rõ yêu cầu cũng như hoàn cảnh sử dụng không ?.

  1. Với DB có 1 môn thiết kế CSDL học về việc khi nào dùng DB, lựa chọn DB loại nào và thiết kế nó như nào.
  2. Các loại file cấu trúc như XML, json thường cần phải load toàn bộ file lên ram sửa trong ram rồi lại lưu lại nên trong nhiều trường hơp có thể phát sinh xung đột.
Bài liên quan
0