Tài liệu File , Thư mục và IO phần cuối doc - Pdf 10

using System;
using System.Drawing;
using System.Windows.Forms;

public class SimpleEditForm : System.Windows.Forms.Form {

private System.Windows.Forms.MenuItem mnuFile;
private System.Windows.Forms.MenuItem mnuOpen;
private System.Windows.Forms.MenuItem mnuSave;
private System.Windows.Forms.MenuItem mnuExit;
private System.Windows.Forms.RichTextBox rtDoc;

// (Bỏ qua phần mã designer.)

private void mnuOpen_Click(object sender, System.EventArgs e) {

OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = "Rich Text Files (*.rtf)|*.RTF|" +
"All files (*.*)|*.*";
dlg.CheckFileExists = true;
dlg.InitialDirectory = Application.StartupPath;

if (dlg.ShowDialog() == DialogResult.OK) {
rtDoc.LoadFile(dlg.FileName);
rtDoc.Enabled = true;
}
}

private void mnuSave_Click(object sender, System.EventArgs e) {

SaveFileDialog dlg = new SaveFileDialog();

.NET Framework hỗ trợ không gian lưu trữ riêng, tức là cho phép bạn đọc và ghi vào hệ
thống file ảo của người dùng cụ thể mà CLR quản lý. Khi bạn tạo các file lưu tr
ữ riêng,
dữ liệu tự động được lưu vào một nơi duy nhất trong đường dẫn profile của người dùng
(thông thường đường dẫn này có dạng C:\Documents and Settings\[username]\Local
Settings\Application Data\IsolatedStorage\ [guid_identifier]).
Một lý do để sử dụng không gian lưu trữ riêng là trao cho một ứng dụng có-độ-tin cậy-
một-phần có khả năng hạn chế khi lưu trữ dữ liệu (xem mục 13.1 để có thêm thông tin về
mã lệnh có-độ-tin-cậy-một-ph
ần). Ví dụ, chính sách bảo mật CLR mặc định cấp cho mã
lệnh cục bộ có FileIOPermission không hạn chế, tức là có quyền đọc và ghi bất kỳ file
nào. Mã lệnh thực thi từ một máy chủ ở xa trên mạng Intranet cục bộ tự động được cấp ít
quyền hơn—thiếu mất FileIOPermission, nhưng có IsolatedStoragePermission, tức là có
khả năng sử dụng không gian lưu trữ riêng (chính sách bảo mật cũng hạn chế dung lượ
ng
tối đa có thể được sử dụng trong không gian lưu trữ riêng). Một lý do khác để sử dụng
không gian lưu trữ riêng là bảo vệ dữ liệu tốt hơn. Ví dụ, đối với dữ liệu trong không gian
lưu trữ riêng của một người dùng, những người dùng khác không phải là nhà quản trị sẽ
không được quyền truy xuất.
Đoạn mã dưới đây minh họa cách truy xuất không gian lưu trữ riêng:
using System;
using System.IO;
using System.IO.IsolatedStorage;

public class IsolatedStoreTest {

private static void Main() {

// Tạo không gian lưu trữ riêng cho người dùng hiện hành.
IsolatedStorageFile store =

xuất dữ liệu trong cùng không gian lưu trữ riêng. Tuy nhiên, bạn có thể tách biệt thêm bởi
miền ứng dụng để nhiều thể hiện của cùng một ứng dụng nhận các không gian lưu trữ
riêng khác nhau, như ví dụ sau:
// Truy xuất không gian lưu trữ riêng của người dùng
// và assembly hiện tại (tương tự ví dụ trên).
store = IsolatedStorageFile.GetStore(IsolatedStorageScope.User |
IsolatedStorageScope.Assembly, null, null);

// Truy xuất không gian lưu trữ riêng của người dùng, assembly,
// và miền ứng dụng hiện hành. Nói cách khác, dữ liệu này chỉ được
// truy xuất bởi thể hiện hiện tại của ứng dụng.
store = IsolatedStorageFile.GetStore(IsolatedStorageScope.User |
IsolatedStorageScope.Assembly | IsolatedStorageScope.Domain,
null, null);
File được lưu trữ như một phần profile của người dùng, vì vậy người dùng có thể truy
xuất các file này từ bất kỳ máy nào trong mạng LAN nếu roaming profile
1[1][3]
đã được
cấu hình (trong trường hợp này, phải thiết lập cờ IsolatedStorageFile.Roaming khi tạo
không gian lưu trữ). Bằng cách để .NET Framework và CLR cung cấp các mức cách ly,
bạn không phải duy trì sự tách biệt giữa các file, và không phải lo việc không hiểu rõ cơ
chế làm việc sẽ gây mất dữ liệu quan trọng.
1.2 Theo dõi hệ thống file để phát hiện thay đổi
V
VBạn cần phản ứng khi hệ thống file thay đổi tại một đường dẫn cụ thể (chẳng
hạn sửa hay tạo file).
#

thay đổi.
Thuộc tính NotifyFilter có thể được thiết lập bằng cách kết hợp các giá trị thuộc kiểu liệt
kê System.IO.NotifyFilters: Attributes, CreationTime, DirectoryName, FileName,
LastWrite, LastAccess, Security, và Size.
Ví dụ dưới đây thụ lý sự kiện Created và Deleted. Và thử nghiệm các sự kiện này bằng
cách tạo ra một file thử nghiệm.
using System;
using System.IO;
using System.Windows.Forms;

public class FileWatcherTest {

private static void Main() {

// Cấu hình FileSystemWatcher.
FileSystemWatcher watch = new FileSystemWatcher();
watch.Path = Application.StartupPath;
watch.Filter = "*.*";
watch.IncludeSubdirectories = true;

// Đăng ký các phương thức thụ lý sự kiện.
watch.Created += new FileSystemEventHandler(OnCreatedOrDeleted);
watch.Deleted += new FileSystemEventHandler(OnCreatedOrDeleted);
watch.EnableRaisingEvents = true;

Console.WriteLine("Press Enter to create a file.");
Console.ReadLine();

if (File.Exists("test.bin")) {
File.Delete("test.bin");


Win32 API cung cấp các hàm không-được-quản-lý trong thư viện kernell32.dll
để trực tiếp đọc và ghi các byte đến cổng tuần tự. Bạn có thể nhập các hàm này
vào ứng dụng hoặc sử dụng Microft Communications ActiveX control
(MSComm.ocx—có trong Microsoft Visual Studio 6).
.NET không cung cấp bất kỳ giao diện được-quản-lý nào để thao tác với các cổng tuần tự.
Do đó, những ai cần chức năng này sẽ phải làm việc với các cơ chế
tương đối phức tạp.
Một hướng giải quyết là tạo một vỏ bọc .NET cho Microsoft Communications Control
(MSComm.ocx). Điều kiểm này cung cấp một mô hình đối tượng mức-cao để làm việc
với cổng tuần tự. Tuy nhiên, bạn phải thu lấy điều kiểm này thông qua Visual Studio 6
(bạn có thể chỉ chọn cài đặt các thành phần ActiveX khi cài đặt Visual Studio 6, tốn
khoảng 5MB). Để
có thêm thông tin, bạn hãy tham khảo tài liệu Visual Studio 6.
Một hướng giải quyết khác là nhập các hàm API từ thư viện kernell32.dll. Cần cẩn thận
khi sử dụng phương pháp này vì bạn phải sử dụng đúng kiểu dữ liệu C# và duy trì layout
của các cấu trúc bộ nhớ. May mắn là, vấn đề này đã được Justin Harrell
() giải quyết với một lớp C# tùy biến có tên là ComPort. Mã lệnh c
ủa
lớp này khá dài, bạn hãy xem trong đĩa CD đính kèm.
Bạn có thể thêm lớp ComPort vào ứng dụng của bạn và sử dụng đoạn mã sau để tương
tác với một cổng COM.
ComPort port = new ComPort();

try {
// Cấu hình cho cổng.
port.BaudRate = 9600;
port.Parity = 0;
port.PortNum = 1;
port.ReadTimeout = 10;


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status