-
Notifications
You must be signed in to change notification settings - Fork 0
/
FileManagement.cs
138 lines (127 loc) · 4.73 KB
/
FileManagement.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace DA5
{
public partial class filemanagement : Form
{
public string patch = "";
private int countfile = 0;
public filemanagement()
{
InitializeComponent();
}
private void opemToolStripMenuItem_Click(object sender, EventArgs e)
{
patch = "";
OpenFileDialog ofile = new OpenFileDialog();
ofile.Filter = "NA file| *.na";
if (ofile.ShowDialog() == DialogResult.OK)
{
patch = output.Text = ofile.FileName;
}
if (patch != "")
{
getfolder(patch, 64, listfoder);
}
}
/// <summary>
/// Lấy thông tin file/folder
/// </summary>
/// <param name="patch">Đường dẫn tập tin NA</param>
/// <param name="pos">Vị trí bắt đầu của vùng mô tả thư mục</param>
/// <param name="l">ListBox muốn thêm nội dung vào</param>
private void getfolder(string patch, int pos, ListBox l)
{
l.Items.Clear();
string fileformat = "", name = "";
int count = 0, countread = 32; ;
byte[] entry = new byte[32];
FileStream fs = new FileStream(patch, FileMode.Open, FileAccess.Read);
fs.Seek(pos, SeekOrigin.Begin);
fs.Read(entry, 0, 32);
// Dò tìm các entry trên thư mục hiện tại
while(entry[0] == '%' && entry[1] != 0 && entry[2] != 0 && countread < 512)
{
// Đọc phần định dạng file từ byte 0 -> byte 4 của entry hiện tại
for (int i = 1; i < 5; i++)
{
byte t = entry[i];
if (t != 0x00)
fileformat += (char)t;
}
// Đọc phần tên của tập tin
for (int i = 5; i < 21; i++)
{
byte t = entry[i];
if (t != 0x00)
name += (char)t;
}
count++;
name = count.ToString() + ". " + name;
if (fileformat != "SYS")
name = name + "." + fileformat;
l.Items.Add(name);
fs.Read(entry, 0, 32);
countread += 32;
}
if (count == 0)
l.Items.Add("Can not find folder or file");
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
}
/// <summary>
/// Tạo mới file nA
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void newToolStripMenuItem_Click(object sender, EventArgs e)
{
byte[] valnull = new byte[1024];
byte[] sign = new byte[64];
// Write sign at Top
sign[0] = (byte)'%';
sign[1] = (byte)'N';
sign[2] = (byte)'A';
sign[3] = (byte)'F';
for (int i = 4; i < 64; i++) {
sign[i] = 0;
}
//---
for (int i = 0; i < 1024; i++)
valnull[i] = 0;
//Chọn đường dẫn lưu tập tin
SaveFileDialog saveFileDlg = new SaveFileDialog();
saveFileDlg.Filter = "NA file| *.na";
if (saveFileDlg.ShowDialog() == DialogResult.OK)
{
patch = output.Text = saveFileDlg.FileName;
}
//Tạo tập tin khi có đường dẫn
if (patch != "")
{
if (File.Exists(patch))
File.Delete(patch);
FileStream fs = new FileStream(patch, FileMode.Append, FileAccess.Write);
// Thêm phần dành riêng
fs.Write(sign, 0, 64);
//Thêm vào phần mô tả hệ thống thư mục (18 Sector_2entry đầu là Sector dành riêng)
for (int i = 0; i < 9; i++)
fs.Write(valnull, 0, valnull.Length);
//Thêm vào bảng FAT
for (int i = 0; i < 12288; i++) //12288 * 1024 = 12MB = Size of FAT
fs.Write(valnull, 0, 1024);
fs.Close();
}
}
}
}