📄 file.cs
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
namespace os
{
class file
{
public string currentdir;//当前路径
disk disk_ = new disk();//
//int dangqianblock = new int();
//int dangqianweizhi = new int();
//int spath1 = 1;//从第一个子目录开始
//int spath2 = 2;
int j = 0;
private void splitfilename(string fullname, ref string filename, ref string extrename)//分割文件名
{
fullname.Trim();
if (string.Equals(fullname, null))
{
MessageBox.Show("文件名不能为空!");
return;
}
string[] temp = new string[2];
temp = fullname.Split('.');
filename = temp[0];
extrename = temp[1];
if (extrename.Length == 0)
{
extrename = "";
}
if (filename.Length > 6)
{
filename = filename.Remove(7);
}
if (extrename.Length > 3)
{
extrename = extrename.Remove(4);
}
}
public void builtfilename(ref string fullname, string filename, string extrename)//合成文件全名
{
if (extrename.Length == 0)
fullname = filename;
else
fullname = filename + "." + extrename;
}
public void builtfullpath(string childdirname)//生成带路径文件名
{
}
public string[] splitfullpath(string fullpath)//分割全路径
{
fullpath.Trim();
if (string.Equals(fullpath, null))
{
MessageBox.Show("路径不能为空!");
}
string[] paths;
paths = fullpath.Split('\\');
return paths;
}
#region 创建文件
public bool createfile(string fullpath, string filename, string ename)//创建文件
{
//int mubiaoblock = 0;
string[] paths;
int mubiaoweizhi = -1;
paths = splitfullpath(fullpath);
if (paths[0] == "C")
{
disk_.diskfilename = disk_.diskfile[0];
}
else
{
disk_.diskfilename = disk_.diskfile[1];
}
j = 0;
int block1 = 1;
int block2 = 2;
for (int i = 0; i < paths.Length-1; i++)
{
disk_.readblock1(block1);
string[] name = new string[8];
for (int n = 0; n < 8; n++)
{
name[n] = Convert.ToString(Convert.ToChar(disk_.buffer1[n * 16 + 0])) + Convert.ToString(Convert.ToChar(disk_.buffer1[n * 16 + 1])) + Convert.ToString(Convert.ToChar(disk_.buffer1[n * 16 + 2])) + Convert.ToString(Convert.ToChar(disk_.buffer1[n * 16 + 3])) + Convert.ToString(Convert.ToChar(disk_.buffer1[n * 16 + 4])) + Convert.ToString(Convert.ToChar(disk_.buffer1[n * 16 + 5]));
name[n] = name[n].Trim();
}
for (int m = 0; m < 8; m++)
{
if (name[m] == paths[i + 1])
mubiaoweizhi = m;
}
if (mubiaoweizhi == -1)
{
disk_.readblock1(block2);
for (int n = 0; n < 8; n++)
{
name[n] = Convert.ToString(Convert.ToChar(disk_.buffer1[n * 16 + 0])) + Convert.ToString(Convert.ToChar(disk_.buffer1[n * 16 + 1])) + Convert.ToString(Convert.ToChar(disk_.buffer1[n * 16 + 2])) + Convert.ToString(Convert.ToChar(disk_.buffer1[n * 16 + 3])) + Convert.ToString(Convert.ToChar(disk_.buffer1[n * 16 + 4])) + Convert.ToString(Convert.ToChar(disk_.buffer1[n * 16 + 5]));
name[n] = name[n].Trim();
}
for (int m = 0; m < 8; m++)
{
if (name[m] == paths[i + 1])
mubiaoweizhi = m;
}
}
block1 = Convert.ToInt32(disk_.buffer1[mubiaoweizhi * 16 + 11]);
block2 = Convert.ToInt32(disk_.buffer1[mubiaoweizhi * 16 + 12]);
}
disk_.readblock1(block1);
mubiaoweizhi = -1;
for (int i = 0; i < 8; i++)
{
if (Convert.ToInt32(disk_.buffer1[i * 16 + 15]) == 0)
mubiaoweizhi = i;
}
if (mubiaoweizhi == -1)
{
disk_.readblock1(block2);
for (int i = 0; i < 8; i++)
{
if (Convert.ToInt32(disk_.buffer1[i * 16 + 15]) == 0)
mubiaoweizhi = i;
}
char[] fcb = new char[16];
char[] fn = new char[filename.Length];
char[] en = new char[ename.Length];
fn = filename.ToCharArray();
en = ename.ToCharArray();
byte[] byfn = new byte[6];
byte[] byen = new byte[3];
for (int i = 0; i < fn.Length; i++)
{
byfn[i] = Convert.ToByte(fn[i]);
}
for (int i = 5; i > fn.Length - 1; i--)
{
byfn[i] = Convert.ToByte(' ');
}
byen[0] = Convert.ToByte(en[0]);
byen[1] = Convert.ToByte(en[1]);
byen[2] = Convert.ToByte(en[2]);
// 寻找位置写入fcb
int bk = disk_.qblock();
disk_.readblock1(block2);
disk_.buffer1[mubiaoweizhi * 16 + 11] = Convert.ToByte(bk);
disk_.buffer1[mubiaoweizhi * 16 + 0] = byfn[0];
disk_.buffer1[mubiaoweizhi * 16 + 1] = byfn[1];
disk_.buffer1[mubiaoweizhi * 16 + 2] = byfn[2];
disk_.buffer1[mubiaoweizhi * 16 + 3] = byfn[3];
disk_.buffer1[mubiaoweizhi * 16 + 4] = byfn[4];
disk_.buffer1[mubiaoweizhi * 16 + 5] = byfn[5];
disk_.buffer1[mubiaoweizhi * 16 + 6] = byen[0];
disk_.buffer1[mubiaoweizhi * 16 + 7] = byen[1];
disk_.buffer1[mubiaoweizhi * 16 + 8] = byen[2];
disk_.buffer1[mubiaoweizhi * 16 + 15] = Convert.ToByte(1);
disk_.buffer1[mubiaoweizhi * 16 + 9] = Convert.ToByte(1);
disk_.writeblock1(block2);
}
else
{
//disk_.readblock1(1);
char[] fcb = new char[16];
char[] fn = new char[filename.Length];
char[] en = new char[ename.Length];
fn = filename.ToCharArray();
en = ename.ToCharArray();
byte[] byfn = new byte[6];
byte[] byen = new byte[3];
for (int i = 0; i < fn.Length; i++)
{
byfn[i] = Convert.ToByte(fn[i]);
}
for (int i = 5; i > fn.Length - 1; i--)
{
byfn[i] = Convert.ToByte(' ');
}
byen[0] = Convert.ToByte(en[0]);
byen[1] = Convert.ToByte(en[1]);
byen[2] = Convert.ToByte(en[2]);
// 寻找位置写入fcb
int bk = disk_.qblock();
disk_.readblock1(block1);
disk_.buffer1[mubiaoweizhi * 16 + 11] = Convert.ToByte(bk);
disk_.buffer1[mubiaoweizhi * 16 + 0] = byfn[0];
disk_.buffer1[mubiaoweizhi * 16 + 1] = byfn[1];
disk_.buffer1[mubiaoweizhi * 16 + 2] = byfn[2];
disk_.buffer1[mubiaoweizhi * 16 + 3] = byfn[3];
disk_.buffer1[mubiaoweizhi * 16 + 4] = byfn[4];
disk_.buffer1[mubiaoweizhi * 16 + 5] = byfn[5];
disk_.buffer1[mubiaoweizhi * 16 + 6] = byen[0];
disk_.buffer1[mubiaoweizhi * 16 + 7] = byen[1];
disk_.buffer1[mubiaoweizhi * 16 + 8] = byen[2];
disk_.buffer1[mubiaoweizhi * 16 + 15] = Convert.ToByte(1);
disk_.buffer1[mubiaoweizhi * 16 + 9] = Convert.ToByte(1);
disk_.writeblock1(block1);
}
return true;
}
#endregion
public int findblock(string mulu, int block)//确定目录在第几个fcb里面!!!!!!!!还要添加上,判断这个fcb是否存在文件
{
int j = -1;
disk_.readblock1(block);
for (int i = 0; i < 8; i++)
{
string findname = Convert.ToString(disk_.buffer1[i * 16 + 0]) + Convert.ToString(disk_.buffer1[i * 16 + 1]) + Convert.ToString(disk_.buffer1[i * 16 + 2]) + Convert.ToString(disk_.buffer1[i * 16 + 3]) + Convert.ToString(disk_.buffer1[i * 16 + 4]) + Convert.ToString(disk_.buffer1[i * 16 + 5]);
findname = findname.Trim();
if (findname == mulu)
{
j = i;
}
}
return j;
}
public bool createfile(string fullname)
{
string filename = "";
string extrename = "";
splitfilename(fullname, ref filename, ref extrename);
return createfile(currentdir, filename, extrename);
}
public bool createdir(string dirname)//创建目录
{
return created(currentdir, dirname);
}
public string[,] nodes()//返回节点
{
string[] paths;
int mubiaoweizhi = -1;
paths = splitfullpath(currentdir);
if (paths[0] == "C")
{
disk_.diskfilename = disk_.diskfile[0];
}
else if (paths[0] == "D")
{
disk_.diskfilename = disk_.diskfile[1];
}
else
{
disk_.diskfilename = disk_.diskfile[0];
}
int block1 = 1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -