#include "STDAFX.h"
#include "DiskManageMent.h"
#include "FileManagement.h"
#include "MainDlgProg.h"
#include "resource.h"
BOOL FileCreate(TCHAR *FileName, int Length, TCHAR *FileKind)
{
BOOL retVal;
int startPos;
UFD *NewFileNode, *p;
if (Length == 0)
{
MessageBox(NULL,
TEXT("您试图创建总长度为零的文件!\n或者您试图创建一个超大文件!"), TEXT("错误!"),
MB_ICONERROR|MB_OK);
return FALSE;
}
/* 判定是否有重名文件 */
for(p=UserTable[CurrentLoginUserID].CurrentUserFileDirectory; p!=NULL; p=p->next)
{
if(!lstrcmp(p->FileLink->FileName, FileName))
{
MessageBox(NULL,
TEXT("文件重名,创建文件失败!"), TEXT("错误!"),
MB_ICONERROR|MB_OK);
return FALSE;
}
}
if((retVal = RequestDisk(&startPos, Length)))
{
/* 创建新的用户文件目录结点 */
NewFileNode=(UFD *)malloc(sizeof(UFD));
NewFileNode->FileLink = (FileTable *)malloc(sizeof(FileTable));
/* 设置结点值 */
lstrcpy(NewFileNode->FileLink->FileName, FileName); //置文件名
lstrcpy(NewFileNode->FileLink->FileKind, FileKind); //置文件属性
NewFileNode->FileLink->length = 0; //文件当前长度: 还未使用-0
NewFileNode->FileLink->maxlength = Length; //文件的最大长度:用户申请的空间
NewFileNode->FileLink->strat = startPos; //置起始位置
NewFileNode->FileLink->openFlag = FALSE; //置文件打开标记
NewFileNode->next = NULL;
/* 把新的结点链到用户文件目录链表结尾 */
if(UserTable[CurrentLoginUserID].CurrentUserFileDirectory == NULL)
{
UserTable[CurrentLoginUserID].CurrentUserFileDirectory = NewFileNode;
}
else
{
p = UserTable[CurrentLoginUserID].CurrentUserFileDirectory;
while(p->next)
{
p = p->next;
}
p->next = NewFileNode;
}
MessageBox(NULL,
TEXT("创建文件成功!"), TEXT("操作成功!"),
MB_OK);
}
else
{
MessageBox(NULL,
TEXT("磁盘空间已满或所创建文件超出磁盘空闲容量!"),
TEXT("错误!"),
MB_ICONERROR|MB_OK);
return FALSE;
}
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
BOOL FileDir(HWND hwndDlg, HWND hwndListView, TCHAR *UserName)
{
UFD *p;
int loopcnt, QuerydUserID;
LVITEM lvI={0};
lvI.mask = LVIF_TEXT;
lvI.state = 0;
lvI.stateMask = 0;
/************************************************************************/
/* 查看整个二级文件系统结构 */
/************************************************************************/
if (!lstrcmp(UserName, TEXT("ALL")))
{
ClearListViewControl(hwndListView);
for (loopcnt=0; loopcnt<CurrentUserNums; loopcnt++)
{
p = UserTable[loopcnt].CurrentUserFileDirectory;
for(int index =0; p!=NULL; p=p->next, index++)
{
lvI.iItem = index;
lvI.iSubItem = 0;
lvI.pszText = p->FileLink->FileName;
ListView_InsertItem(hwndListView, &lvI);
lvI.iSubItem = 1;
lvI.pszText = p->FileLink->FileKind;
ListView_SetItem(hwndListView, &lvI);
TCHAR szTmp[10];
wsprintf(szTmp, TEXT("%d"), p->FileLink->maxlength);
lvI.iSubItem = 2;
lvI.pszText = szTmp;
ListView_SetItem(hwndListView, &lvI);
if(p->FileLink->openFlag)
wsprintf(szTmp, TEXT("打开"));
else
wsprintf(szTmp, TEXT("关闭"));
lvI.iSubItem = 3;
lvI.pszText = szTmp;
ListView_SetItem(hwndListView, &lvI);
lvI.iSubItem = 4;
lvI.pszText = UserTable[loopcnt].UserName;
ListView_SetItem(hwndListView, &lvI);
}
}
return TRUE;
}
/************************************************************************/
/* 查看当前用户二级文件系统结构 */
/************************************************************************/
for(loopcnt=0; loopcnt<MaxUser; loopcnt++)
{
if(!lstrcmp(UserTable[loopcnt].UserName, UserName))
{
QuerydUserID = loopcnt;
break;
}
}
if(loopcnt == MaxUser)
{
MessageBox(hwndDlg,
TEXT("没有找到该用户,请检查输入用户名是否正确!"), TEXT("错误!"),
MB_ICONERROR|MB_OK);
return FALSE;
}
else
{
/************************************************************************/
/* 列出用户自己的文件 */
/************************************************************************/
ClearListViewControl(hwndListView);
p = UserTable[QuerydUserID].CurrentUserFileDirectory;
for(int index =0; p!=NULL; p=p->next, index++)
{
lvI.iItem = index;
lvI.iSubItem = 0;
lvI.pszText = p->FileLink->FileName;
ListView_InsertItem(hwndListView, &lvI);
lvI.iSubItem = 1;
lvI.pszText = p->FileLink->FileKind;
ListView_SetItem(hwndListView, &lvI);
TCHAR szTmp[10];
wsprintf(szTmp, TEXT("%d"), p->FileLink->maxlength);
lvI.iSubItem = 2;
lvI.pszText = szTmp;
ListView_SetItem(hwndListView, &lvI);
if(p->FileLink->openFlag)
wsprintf(szTmp, TEXT("打开"));
else
wsprintf(szTmp, TEXT("关闭"));
lvI.iSubItem = 3;
lvI.pszText = szTmp;
ListView_SetItem(hwndListView, &lvI);
lvI.iSubItem = 4;
lvI.pszText = TEXT("当前用户");
ListView_SetItem(hwndListView, &lvI);
}
/************************************************************************/
/* 列出其他用户共享的文件 */
/************************************************************************/
for (loopcnt=0; loopcnt<CurrentUserNums; loopcnt++)
{
p = UserTable[loopcnt].CurrentUserFileDirectory;
for(int index =0; p!=NULL; p=p->next, index++)
{
if (!lstrcmp(p->FileLink->FileKind, TEXT("共享")))
{
lvI.iItem = index;
lvI.iSubItem = 0;
lvI.pszText = p->FileLink->FileName;
ListView_InsertItem(hwndListView, &lvI);
lvI.iSubItem = 1;
lvI.pszText = p->FileLink->FileKind;
ListView_SetItem(hwndListView, &lvI);
TCHAR szTmp[10];
wsprintf(szTmp, TEXT("%d"), p->FileLink->maxlength);
lvI.iSubItem = 2;
lvI.pszText = szTmp;
ListView_SetItem(hwndListView, &lvI);
if(p->FileLink->openFlag)
wsprintf(szTmp, TEXT("打开"));
else
wsprintf(szTmp, TEXT("关闭"));
lvI.iSubItem = 3;
lvI.pszText = szTmp;
ListView_SetItem(hwndListView, &lvI);
lvI.iSubItem = 4;
lvI.pszText = UserTable[loopcnt].UserName;
ListView_SetItem(hwndListView, &lvI);
}
}//for(int index =0; p!=NULL; p=p->next, index++)
}//for (loopcnt=0; loopcnt<CurrentUserNums; loopcnt++)
}
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
BOOL FileWrite(HWND hwndDlg, TCHAR *FileName)
{
UFD *p,*q;
int i,k,startPos;
q=UserTable[CurrentLoginUserID].CurrentUserFileDirectory;
for(p=q; p!=NULL; p=p->next)
{
if(!lstrcmp(p->FileLink->FileName, FileName))
{
break;
}
}
if(p)
{
/* 除了只读文件,都可以写入内容 */
if(lstrcmp(p->FileLink->FileKind, TEXT("只读")) == 0)
{
MessageBox(hwndDlg,
TEXT("该文件为只读, 不可写入!"), TEXT("错误!"),
MB_OK|MB_ICONERROR);
return FALSE;
}
/* 若文件是关闭状态,则不允许写 */
if (p->FileLink->openFlag == FALSE)
{
MessageBox(hwndDlg,
TEXT("文件未打开, 写入失败!"), TEXT("错误!"),
MB_OK|MB_ICONERROR);
return FALSE;
}
/* 1. 获取用户输入
2. 判定数据长度是否越界*/
TCHAR szStringInput[100];
GetDlgItemText(hwndDlg, IDC_ED_FILEIN, szStringInput, 100);
startPos = p->FileLink->strat;
p->FileLink->length = lstrlen(szStringInput);
if(p->FileLink->length > p->FileLink->maxlength)
{
MessageBox(hwndDlg,
TEXT("写入字符串长度大于该文件的总长度,写入失败!"), TEXT("错误!"),
MB_OK|MB_ICONERROR);
return FALSE;
}
/* 写盘 */
for(i=startPos,k=0; k<(int)lstrlen(szStringInput); i++,k++)
{
LocalHardDisk[i] = szStringInput[k];
}
MessageBox(hwndD
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
网络081_200807255_李正兴_模拟二级文件系统管理.rar (33个子文件)
操作系统课程设计_网络081_200807255_李正兴.doc 434KB
模拟二级文件管理
FileOpenDlgProg.cpp 580B
模拟二级文件管理.plg 2KB
FileCloseDlgProg.cpp 584B
resource.h 2KB
FileManagement.h 465B
FileCloseDlgProg.h 189B
UserManagement.cpp 2KB
LoginProg.h 445B
模拟二级文件管理.ncb 73KB
CreateFileDlgProg.h 241B
stdfx.cpp 834B
DiskManagement.cpp 2KB
FileManagement.cpp 14KB
RC.RC 9KB
FileDeleteProg.cpp 578B
模拟二级文件管理.dsp 5KB
RC.APS 36KB
LoginProg.cpp 3KB
MainDlgProg.h 278B
FileDeleteProg.h 181B
UserManagement.h 220B
STDAFX.h 3KB
DirDlgProg.h 162B
MainProg.cpp 365B
Release
模拟二级文件管理.exe 48KB
DiskManageMent.h 209B
CreateFileDlgProg.cpp 1KB
模拟二级文件管理.dsw 557B
模拟二级文件管理.opt 48KB
DirDlgProg.cpp 1KB
FileOpenDlgProg.h 185B
MainDlgProg.cpp 4KB
共 33 条
- 1
资源评论
- silanxiayu2012-06-22有点过于简单 应付一下作业还可以 实际学习起来没有太大的帮助 不过有的地方比我想的完善 提醒了我
- shenmen1122014-12-27挺不错的,可以参考学习
- shangcangheya2012-12-02模拟文件系统的实现,很好的程序,不过就是简单了一点,可以参考参考
- dbzln2011-10-14功能不太强 最好虚拟硬盘能保存到磁盘 下次启动程序 能读取虚拟磁盘里的文件
WEBJ2EE
- 粉丝: 2
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功