#ifndef FILEOPERA_H
#define FILEOPERA_H
#include "common.h"
#include "MFD.h"
using namespace std;
extern vector UsrInfo;
extern int num;
extern MFD UsrInput;
extern int Headnum;
extern vector< vector > FileState;
extern UFD FileInput;
extern UOF StateInput;
extern Cluster ClusterInput;
extern vector < vector > FileInfo;
extern vector< Cluster> FileCluster;
void initFiletoRom()
{
FILE *streamInit;
if ((streamInit = fopen("disk.txt", "r")) == NULL)
{
cout << "从磁盘中读入时失败!" << endl;
return ;
}
fscanf(streamInit, "%d", &Headnum);
int alreadynum;
int ret;
alreadynum = 0;
while (alreadynum
{
UsrInfo.push_back(UsrInput);
alreadynum++;
}
vector t;
for (int i = 0; i < UsrInfo.size(); i++)
{
FileInfo.push_back(t);
}
vector temp;
for (int i = 0; i < UsrInfo.size(); i++)
{
FileState.push_back(temp);
}
for (int i = 0; i < UsrInfo.size(); i++)
{
fscanf(streamInit, "%d", &Headnum);
alreadynum = 0;
while (alreadynum<Headnum && (ret = fscanf(streamInit, "%s %d %d %d", &FileInput.filename, &FileInput.mode, &FileInput.length, &FileInput.addr)) != -1)
{
FileInfo[i].push_back(FileInput);
alreadynum++;
}
}
for (int i = 0; i < UsrInfo.size(); i++)
{
fscanf(streamInit, "%d", &Headnum);
alreadynum = 0;
while (alreadynum<Headnum && (ret = fscanf(streamInit, "%s %d %d %d %d", &StateInput.filename, &StateInput.mode, &StateInput.state, &StateInput.read_poit,&StateInput.write_poit)) != -1)
{
FileState[i].push_back(StateInput);
alreadynum++;
}
}
alreadynum = 0;
char Tempbuf[256];
int total = 0;
char c;
while (total < 68)
{
total++;
memset(Tempbuf, 0, sizeof(Tempbuf));
if ((ret = fscanf(streamInit, "%d %d", &ClusterInput.next_num, &ClusterInput.is_data)) != -1)
{
if (ClusterInput.is_data == 1)
{
fscanf(streamInit, "%c", &c);
fgets(Tempbuf, 256, streamInit);
}
strcpy(ClusterInput.data, Tempbuf);
FileCluster.push_back(ClusterInput);
}
else
{
ClusterInput.next_num = alreadynum;
ClusterInput.is_data = 0;
strcpy(ClusterInput.data, Tempbuf);
FileCluster.push_back(ClusterInput);
}
alreadynum++;
}
fclose(streamInit);
}