Xin chào, và chào mừng trở lại.
Trong bài giảng này, tôi muốn nói về việc truy cập tệp.
Vì vậy, các tệp trên đĩa có tên và các quy tắc đặt tên tệp được xác
định bởi hệ điều hành của bạn.
Bạn có thể phải điều chỉnh tên tùy thuộc vào hệ điều hành mà chương
trình của bạn đang chạy.
Nếu chương trình của bạn đang chạy trên windows so với Linux, cấu trúc
thư mục thực tế cũng khác.
Vì vậy, nếu bạn sử dụng slashers chuyển tiếp hoặc dấu gạch chéo ngược, bạn phải điều
chỉnh điều này trong chương trình của mình.
Nhưng phần lớn, tên tương đối có các quy tắc
đặt tên giống nhau, v.v.
Nhưng có cơ hội mà bạn phải điều chỉnh nó.
Một chương trình tham chiếu đến một tệp thông qua một con trỏ tệp hoặc một con trỏ luồng.
Vì nó hoạt động nhiều hơn là một tệp, bạn thực sự có thể,
chúng tôi đã đề cập đến vấn đề này trước đó, nhưng tiêu chuẩn các chức năng io hoạt động trên mọi thiết bị.
Vì vậy, nó được gọi là con trỏ tệp, nhưng nó thực sự nên được gọi
là một con trỏ luồng.
Bạn liên kết một con trỏ tệp với một tệp được lập trình khi chương
trình của bạn được chạy.
Vì vậy, những gì bạn cuối cùng làm là bạn sẽ tạo một con trỏ
bên trong chương trình của bạn, nó sẽ thuộc loại tệp và điều đó sẽ đại diện cho tệp khi bạn
đọc và ghi vào tệp.
Chúng tôi sử dụng các con trỏ tệp này như một cách hiệu quả hơn để thực sự trỏ đến các
tệp ngược lại đến tên vì tên có thể
hơi khác một chút.
Con trỏ sẽ đại diện cho những gì nó thực sự trỏ đến.
Và bạn có thể sử dụng lại các con trỏ, để trỏ đến các
tệp khác nhau vào những dịp khác nhau, một lần nữa, được đại diện bởi tên tệp.
Một con trỏ tệp trỏ đến một cấu trúc nhập tệp đại diện cho một luồng.
Bạn thực sự có thể đi và nhìn tại cấu trúc tệp để xem
mọi thứ bên trong nó.
Nhưng nó chứa thông tin như như việc bạn muốn đọc hay ghi
hay cập nhật tệp, địa chỉ của bộ đệm trong bộ nhớ nơi bạn đang lưu
trữ dữ liệu, con trỏ đến vị trí hiện tại trong
tệp cho thao tác tiếp theo.
Chúng tôi đã đề cập vị trí là quan trọng
vì đó là nơi bạn viết và đọc.
Và bạn có thể đặt tất cả thông tin này bên trong cấu trúc bằng cách sử
dụng các thao tác nhập và xuất tệp.
Các hoạt động đầu vào tệp đầu ra, khi bạn mở một tệp, nó sẽ thực
sự chỉ định xem bạn muốn đọc hoặc viết.
Và sau đó, bạn cũng có thể thay đổi vị trí hiện tại bằng cách sử dụng các phương
pháp khác như tìm kiếm, v.v. mà chúng ta sẽ nói về.
Nếu bạn muốn sử dụng một số tệp đồng thời trong chương trình của
bạn, bạn phải tạo một con trỏ tệp cho mỗi tệp.
Bạn chỉ có thể sử dụng lại tệp con trỏ nếu bạn đang đọc và viết vào
những thời điểm khác nhau.
Có giới hạn về số lần mở các tệp bạn có thể có cùng một lúc.
Bạn có thể nhìn vào giới hạn trong IO tiêu chuẩn, có một
hằng số được xác định f mở tối đa tất cả một lần nữa phụ thuộc vào hệ
điều hành bạn đang chạy.
Nhưng bạn thường không muốn tạo và mở nhiều tệp cùng một lúc.
Viết và đọc các tệp là một hoạt động tốn kém vì bạn đang
ghi trên ổ cứng.
Nó không nhanh như viết bộ nhớ, vì vậy nó
mất thời gian và nó có thể làm cho chương trình của bạn để ít phản hồi hơn.
Bạn không muốn có 10 mở và ghi
10 tệp cùng một lúc.
Để mở một tệp, điều này sẽ là bước đầu tiên bạn
làm trước khi đọc và viết.
Vì vậy, bạn muốn liên kết một tên tệp bên ngoài
với toàn bộ con trỏ cuối cùng thông qua một quy trình được gọi là mở tệp.
Cách bạn mở tệp và thấy là bạn gọi hàm f mở.
Thao tác này sẽ trả về tệp con trỏ mà bạn có
thể sử dụng để đọc và viết.
Và một lần nữa, con trỏ tệp là sẽ trỏ đến một
tệp bên ngoài cụ thể có trên đĩa.
F mở sẽ lấy tên của tập tin.
F mở là những gì bạn phải làm trước khi bạn đọc / viết.
Đó thường là hoạt động đầu tiên của bạn.
Và như với hầu hết các chức năng này, tất cả chúng đều được định nghĩa trong standardio. h.
Đây là định nghĩa của cuộc gọi mở f.
Bạn sẽ thấy rằng sự trở lại value là một con trỏ tệp,
nó là tất cả các chữ hoa, cấu trúc tệp.
Vì vậy, tất cả các tập tin mũ.
Sau đó, bạn sẽ nhận thấy rằng nó cần một vài tham số, nó có một
tên và một chế độ và đừng lo lắng về điều này hạn chế đó chỉ là những thứ C11 hơn.
Nó thực sự chỉ mang tính cách con trỏ đến một tên và một chế độ.
Đối số đầu tiên của hàm là một con trỏ đến
một chuỗi là tên của tệp, do đó sẽ nằm trong dấu ngoặc kép.
Bạn có thể chỉ định tên rõ ràng hoặc sử dụng một con trỏ ký tự có chứa địa
chỉ của chuỗi ký tự.
Vì vậy, tất cả những gì điều này đang nói là bạn có thể tạo một chuỗi ký tự
và gán nó vào văn bản theo nghĩa đen và sau đó chuyển
chuỗi vào hàm hoặc bạn có thể đặt bên trong dấu ngoặc kép ngay bên trong lệnh gọi hàm.
Bạn có thể lấy tên tệp thông qua dòng lệnh dưới dạng đầu vào
từ người dùng hoặc xác định nó như một hằng số trong chương trình của bạn.
Nếu nó luôn là cùng một tệp bạn đang đọc thư cho
và tên không quan trọng, bạn có thể chỉ là một hằng số.
Nếu chương trình của bạn linh hoạt hơn, nó có thể nhận được thông tin đầu vào từ người dùng để nói những
gì bạn muốn đọc hoặc ghi.
Đối số thứ hai cho f mở hàm là một chuỗi ký tự đại
diện cho chế độ tệp.
Điều này chỉ định những gì bạn muốn làm với tệp, cho dù bạn
muốn đọc nó, cho dù bạn muốn ghi vào nó, cho dù bạn muốn thêm vào nó.
Đặc tả chế độ tệp là một chuỗi ký tự giữa dấu ngoặc
kép và tôi sẽ hiển thị cho bạn một số trong số những cái mà chúng
tôi sẽ sử dụng rất nhiều.
Giả sử cuộc gọi để mở thành công, nó sẽ trả về con trỏ
tệp đó, tất cả các chữ hoa.
Và sau đó bạn có thể sử dụng tệp này con trỏ để gọi các chức năng đầu vào
/ đầu ra khác trong tiêu đề IO tiêu chuẩn, và chúng ta sẽ trải qua những điều
đó khi chúng ta đọc và viết hoặc bạn cũng có thể nhận được vị trí
bằng cách sử dụng con trỏ đó để thay đổi vị trí bạn đang ở đâu trong tệp.
Nếu tệp không thể mở được vì lý do nào đó, f open
sẽ trả về null.
Vì vậy, điều này có nghĩa là trước khi bạn bắt đầu thực hiện bất
kỳ thao tác đọc hoặc ghi nào, hãy đảm bảo rằng con trỏ không bằng null, khác nếu kiểm tra.
Đây là tập tin chế độ mà tôi đã đề cập.
Các chế độ tệp, hãy nhớ, là tham số thứ hai cho cuộc gọi mở f.
Đây là những gì chỉ định những gì bạn muốn thực hiện với tệp và
tất cả đều nằm trong dấu ngoặc kép.
Vì vậy, nếu bạn làm một w, điều đó có nghĩa là bạn muốn để mở tệp văn bản để viết.
Nếu bạn làm một, điều đó có nghĩa là bạn muốn để mở tệp văn bản để thêm vào, tất
cả các lần ghi đều ở cuối tệp.
Nếu bạn làm một chữ r, nó sẽ mở ra tệp văn bản để đọc.
Nếu bạn thêm một dấu cộng cho bất kỳ những điều này, về cơ bản nó sẽ tạo tệp
nếu nó không tồn tại.
Vì vậy, nếu bạn mở một tệp w plus, nó sẽ mở nó lên để cập nhật và nó sẽ cắt
bớt tệp về 0 nếu nó tồn tại hoặc nó có thể tạo một tệp mới
nếu nó không tồn tại.
Với những cái khác, nó sẽ ghi hoặc đọc um và tệp
phải tồn tại.
Tương tự với một dấu cộng, nó sẽ mở ra nó lên để bổ sung, để cập nhật,
vào cuối tệp hiện có hoặc tạo tệp nếu nó không tồn tại.
Và điểm cộng r sẽ mở ra tệp văn bản để cập nhật, nó
sẽ không tạo tệp ở đó bởi vì nó sẽ trống rỗng.
Vì vậy, bài đọc chỉ dành cho cả đọc và viết khi bạn nhìn
thấy dấu cộng r.
Khác một chút so với cái khác điểm cộng ở chỗ họ thực sự tạo
ra tệp mà nó không tồn tại.
Chế độ ghi.
Nếu bạn muốn viết thư cho một tệp văn bản
hiện có với tên myfile. txt, bạn sẽ tạo con trỏ tệp của bạn, tất cả các chữ hoa.
Đặt nó thành null, khởi tạo nó là null.
Và sau đó bạn có thể sẽ tạo tệp của bạn dưới dạng
một con trỏ ký tự khác, myfile. txt hoặc bạn có thể chuyển nó vào làm tham số đầu tiên, và
sau đó bạn chỉ cần nói f open.
F mở tên tệp và sau đó w bên trong dấu ngoặc kép mở tệp để ghi và
nó trả về một con trỏ tệp.
Đó là lý do tại sao bạn có tệp p trên bên trái của nhiệm vụ.
Sau đó, bạn muốn kiểm tra để thực hiện chắc chắn tệp p không bằng null.
Bởi vì nếu nó null, nếu nó không mở được vì bất
kỳ lý do gì có thể tên tệp bị sai hoặc nó không tồn tại, thì bạn sẽ không
thể ghi vào nó.
Vì vậy, bạn luôn muốn làm f kiểm tra và in ra một
số thông tin nếu nó không mở.
Mã này sẽ mở tệp và nó sẽ liên
kết tệp với tên myfile. txt với con trỏ tệp của bạn tệp fp.
Chế độ w có nghĩa là chúng ta chỉ có thể viết vào tệp, bạn không thể đọc từ nó.
Nếu một tệp có tên tệp của tôi văn bản đó không tồn
tại, lệnh gọi f mở sẽ tạo ra một văn bản
mới tệp có tên này, và đó là để mở với tùy chọn w.
Và vì vậy khi chúng ta đã thấy trong phần trước chế độ, w plus sẽ tạo tệp nếu không tồn
tại nhưng nó cũng cắt ngắn tệp thành 0.
Đó là sự khác biệt với w.
W sẽ tạo ra nếu nó không tồn tại, nhưng nó sẽ
không cắt ngắn nó thành 0.
Vì vậy, đây là cách tiêu chuẩn để mở tệp, sử
dụng w bên trong dấu ngoặc kép.
Nếu bạn chỉ cung cấp tên tệp mà không có bất kỳ thông số kỹ thuật
đường dẫn nào, vì vậy đó là những gì chúng tôi đã làm trong ví dụ,
một đường dẫn ghi nhớ là tên của các thư mục.
Nếu bạn không cung cấp tên của thư mục, nó sẽ giả định rằng tệp đó nằm
trong thư mục hiện tại bất cứ nơi nào chương trình đang thực thi.
Nếu bạn thực sự muốn mở up một tệp ở nơi khác,
nơi nó không thực sự nằm ở thư mục chương trình, sau đó bạn phải
chỉ định toàn bộ đường dẫn.
Đó được gọi là con đường tuyệt đối.
Khi bạn không cung cấp đường dẫn, nó thường đường dẫn tương đối, nó liên quan
đến nơi chương trình đang chạy.
Vì vậy, bạn có thể chỉ định một trong hai, đường dẫn tuyệt đối hoặc
đường dẫn tương đối, chỉ cần đảm bảo bạn biết vị trí của nó và bạn đang làm đúng.
Đường dẫn tương đối thường tốt hơn bởi vì sau đó nó không phụ thuộc.
Nếu ai đó đã chuyển đi nó không phụ thuộc
vào nơi nó được di chuyển.
Và bạn thực sự có thể làm một đường dẫn tương đối và bạn có thể quay lại các
thư mục, vì vậy bạn có thể thực hiện một dấu chấm dấu gạch chéo và điều đó liên quan đến
nơi chương trình đang chạy, bạn chỉ quay trở lại một vài thư mục.
Khi bạn sử dụng một tuyệt đối đường dẫn, nó thực sự sẽ
là một cái gì đó giống như chương trình dấu hai chấm nếu bạn đang sử dụng windows.
Và nếu tệp đó đã từng được di chuyển, chương trình sẽ không thể mở nó.
Vì vậy, khi mở một tệp để viết liên kết tệp được cắt ngắn
thành 0 và vị trí sẽ là ở đầu bất kỳ dữ liệu hiện có
nào cho hoạt động đầu tiên.
Bất kỳ dữ liệu nào trước đây được ghi vào tệp sẽ bị
mất và bị ghi đè bởi bất kỳ hoạt động ghi nào.
Vì vậy, một lần nữa mà không cung cấp điểm cộng về nó, nó chỉ có nghĩa là
bạn không thể đọc và viết.
Đây là chỉ viết.
W chỉ đúng.
W plus có nghĩa là bạn có thể đọc và viết.
Chế độ nối.
Nếu bạn muốn thêm vào một thay vì ghi đè lên nó, bạn có thể
chỉ định một chế độ.
Điều này là tùy thuộc.
Điều này đặt tệp ở cuối của mọi dữ liệu đã viết trước đó.
Nếu tệp không tồn tại, nó tạo ra một cái mới.
Ví dụ ở đây là bạn chỉ thay đổi tham số thứ hai thành một
dấu ngoặc kép bên trong, nó sẽ thêm vào cuối myfile. txt.
Và đừng quên rằng bạn nên luôn kiểm tra giá
trị trả về cho null mỗi lần.
Bạn luôn muốn làm nếu tệp p không bằng null.
Khi bạn mở một tệp trong append , tất cả các hoạt
động ghi sẽ ở cuối dữ liệu trong tệp trong mỗi thao tác ghi.
Tất cả các hoạt động ghi phần phụ dữ liệu vào tệp
và bạn không thể cập nhật nội dung hiện có trong chế độ này, tất cả đã kết thúc.
Ở chế độ đọc, chúng ta có thể mở lên tệp để đọc tệp.
Chúng tôi chỉ sử dụng r bên trong dấu ngoặc kép.
Đây là chỉ đọc, bạn không thể ghi vào tệp.
Nếu bạn làm r cộng với bạn sẽ có thể đọc và viết.
Vì vậy, có vẻ như các cuộc gọi khác, bạn chỉ cần mở f, chuyển vào
tên của tệp và sau đó r gấp đôi dấu ngoặc kép trả về một con trỏ tệp.
Chúng tôi cũng sẽ định vị tệp đến đầu dữ liệu.
Nếu bạn định chỉ đọc tệp, nó phải đã tồn tại.
Bạn sẽ không đọc một tệp trống.
Vì vậy, không có tùy chọn tạo tệp nó không tồn tại, nó
sẽ trống rỗng hoặc bạn sẽ lấy lại tệp đối thủ sẽ là null.
Nếu bạn cố gắng mở một tệp cho đọc nó không tồn tại,
nó sẽ trả về con trỏ null.
Nếu nó tồn tại và nó trống rỗng, bạn sẽ không trả về dữ liệu nào.
Bạn luôn muốn kiểm tra giá trị trả về từ f mở.
Một lần nữa, đọc nó cho lần thứ hai, nó quan trọng.
Bởi vì nếu đó là một con trỏ null, chương trình của bạn sẽ gặp sự
cố, nó sẽ hoạt động tồi tệ.
Đổi tên tệp.
Bây giờ chúng tôi biết làm thế nào để mở một tệp.
Mở tệp là lần đầu tiên hoạt động, bạn chỉ định
chế độ và tên của tệp.
Điều đó trả lại cho bạn tệp con trỏ mà bây giờ bạn có
thể sử dụng để làm những việc khác.
Đổi tên tệp là đôi khi quan trọng.
Nó rất dễ.
Bạn chỉ cần sử dụng chức năng đổi tên.
Nó có một tên cũ và một tên mới tên dưới dạng con trỏ ký tự không
đổi, và nó trả về một số nguyên.
Số nguyên được trả về sẽ bằng 0 nếu thay đổi tên
thành công và khác không nếu thay đổi tên thành công.
Tệp không được mở khi bạn gọi đổi tên.
Nếu không, nó sẽ thất bại vì nó đang được sử dụng nên bạn không thể đổi
tên tệp khi nó đang được sử dụng.
Vì vậy, những gì bạn có thể làm ở đây là bạn có thể chỉ cần nói đổi tên, chuyển vào tên
tệp cũ và tên tệp mới.
Trong ví dụ này, chúng tôi đang sử dụng một đường dẫn đến một tệp trong cửa sổ.
Và bạn biết đó là cửa sổ vì tôi nhìn thấy dấu hai chấm.
Bạn cũng nhận thấy rằng dấu gạch chéo ngược là có hai lần.
Lý do cho điều đó là bởi vì dấu gạch chéo ngược là một ký tự đặc biệt trong c.
Dấu gạch chéo ngược n là một phản hồi dòng.
Dấu gạch chéo ngược r là một dấu xuống dòng.
Vì vậy, dấu gạch chéo ngược có đặc biệt ý nghĩa trong chương trình.
Vì vậy, nếu bạn thực sự muốn sử dụng dấu gạch chéo ngược cho một đường dẫn trong thư mục,
đó là những gì cửa sổ làm, bạn phải cung cấp hai trong số họ.
Và vì vậy ở đây chúng tôi đang đổi tên một myfile. txt định vị thư mục
tạm thời.
Chúng tôi đổi tên nó thành dấu gạch dưới tệp của tôi sao chép. văn bản trong thư mục cố gắng.
Và nếu điều đó không bằng đến một, nó sẽ không thành công.
Chúng tôi chỉ in ra một đầu ra cho biết nó không thành công.
Nếu không, bản in của bạn thành công.
Điều này sẽ thay đổi tên của myfile. txt trong thư mục tạm thời để sao chép tệp của tôi.
Nếu đường dẫn tệp không chính xác hoặc tệp không tồn tại, nó
sẽ không thể đổi tên.
Bạn cũng có thể đóng một tệp và bạn muốn để làm điều này bất cứ khi nào bạn mở một tệp.
Vì vậy, khi bạn hoàn thành chính tệp đó, bạn muốn
yêu cầu hệ điều hành giải phóng tệp đó.
Hãy nhớ rằng, có một giới hạn vào số lượng tệp
bạn có thể mở vào bất kỳ thời điểm nào.
Bạn có thể làm điều này bằng cách gọi hàm f đóng.
F close chấp nhận một tệp con trỏ như một đối số.
Hãy nhớ rằng, con trỏ tệp đại diện cho tệp.
Nó trả về một eof.
Eof là một int.
Trả về eof nếu xảy ra lỗi.
Eof là một nhân vật đặc biệt được gọi là ký tự cuối tệp.
Nó được định nghĩa trong standardio. h dưới dạng số nguyên âm.
Nó thường tương đương sang âm một.
Nếu f đóng thành công, nó sẽ trả về số không.
Vì vậy, bạn có thể kiểm tra eof cho không thành công.
Bạn chỉ cần nói f close pass trong con trỏ, sau đó bạn có thể đặt con
trỏ thành null và kết quả của việc gọi f close là kết nối giữa
con trỏ, tệp p và tệp vật lý bị hỏng.
Tệp P không còn được sử dụng nữa để truy cập
tệp để đọc, viết hoặc thêm hoặc đổi tên.
Nếu tệp đang được ghi vào, nội dung hiện tại của bộ đệm đầu ra được
ghi vào tệp đảm bảo rằng dữ liệu không bị mất.
Vì vậy, bạn không có bất kỳ vấn đề với toàn vẹn dữ liệu,
bạn sẽ không thực sự đóng tệp nếu nó được ghi vào một chủ đề khác.
Vì vậy, nó là chủ đề an toàn.
Chúng ta chưa nói về chủ đề, đó là khái niệm tiên tiến hơn.
Nhưng đó là nơi bạn có thể có nhiều điểm thực thi trong chương trình của bạn.
Đó là thực hành lập trình tốt để đóng một tệp ngay sau khi
bạn hoàn thành nó, giống như đó là thực hành lập trình
tốt để giải phóng bộ nhớ khi bạn hoàn thành với nó, tương tự để đóng tệp.
Nó bảo vệ khỏi mất dữ liệu đầu ra.
Bạn cũng phải đóng một tệp trước khi cố gắng
đổi tên hoặc xóa nó, nó phải được đóng lại, nó không thể mở được.
Làm thế nào về việc xóa một tệp.
Bạn có thể xóa một tệp bằng cách gọi hàm loại bỏ.
Điều này cũng được khai báo trong standardio. h.
Tất cả các hoạt động tệp là được khai báo trong tiêu chuẩn. trời ơi.
Bạn luôn có thể nhìn vào cái này nếu bạn muốn các
tệp tiêu đề c được cài đặt ở đâu.
Vì vậy, bạn chỉ cần nói loại bỏ tên của tệp.
Ở đây bạn không cần phải sử dụng con trỏ tệp.
Bạn chỉ có thể nói bởi vì tệp không cần
phải thực sự được mở để xóa nó.
Tương tự với việc đổi tên vì bạn không thực sự muốn các tệp được mở bởi
vì đổi tên hoặc xóa sẽ không thành công.
Nó sẽ xóa tệp có tên là myfile. txt từ thư mục
hiện tại.
Đây là cung cấp một đường dẫn tương đối.
Nó sẽ tìm kiếm tệp đó bất cứ nơi nào chương trình đang thực thi.
Nếu không, bạn cần phải cung cấp một đường dẫn tuyệt đối.
Không thể mở tệp khi bạn cố gắng xóa nó, giống như đổi tên.
Bạn nên luôn kiểm tra lại với các thao tác xóa tệp.
Bạn có thể phá hủy của bạn hệ thống nếu bạn không.
Xóa rất tốn kém, hoạt động rất nguy hiểm.
Xóa tệp có thể gây ra sự cố.
Vì vậy, hãy cẩn thận.
Tất cả thông tin trong bài giảng này liên quan đến việc truy cập tệp,
cách bạn có thể mở tệp, là những gì bạn cần làm trước
khi đọc và viết, và cũng là cách bạn có thể xóa và đổi tên tệp rồi
đóng khi bạn sử dụng xong.
Mọi thứ đều dựa trên tắt con trỏ tệp đó.
Vì vậy, hãy hiểu con trỏ tệp đó và cấu trúc nó chứa.
Công cụ khá hữu ích.
Tiêu đề io tiêu chuẩn chứa tất cả các thông tin tuyệt vời.
Một vài bài giảng tiếp theo, chúng ta
sẽ để nói về việc đọc và ghi vào các tệp văn bản, thực sự thêm dữ liệu hoặc thêm hoặc đọc nó.
Cảm ơn bạn. Tôi hy vọng nó sẽ có ích.