博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
操作系统实验报告五
阅读量:5280 次
发布时间:2019-06-14

本文共 4507 字,大约阅读时间需要 15 分钟。

 

 

 

 

 

 

操作系统实验报告五

 

 

 

                       姓名:许恺

                       学号:2014011329

                       日期:12.13

 

 

 

 

 

 

 

 

 

一.思路构想

关于这次的实验我真的是摸不着头脑,不知道到底让做出一个什么样的东西来,感觉要求说的又清楚又模糊,听过同学的解释,应该是要做一个像Windows那样的文件系统,去管理我们有的10万多个网页,那既然是文件管理系统,我就想到了以前做过的一个学生管理系统,应该差不多吧,虽然只需要实现查询功能,应该用终端实现就可以,所以我想的是用终端来实现流程的可视化,通过在内存中开辟巨大空间来实现文件的管理。构造一个数据结构来存放文件的属性。

二.源代码及结果贴图

// webserver5.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "iostream"#include "fstream"#include "windows.h"#include "string"#include "time.h"using namespace std;struct FileStruct{    string Nam;    //文件名称    FILETIME t;    //文件创建时间,因使用需要,所以是FILETIME类型的    string info;//文件内容};struct FileStruct f[1000];void Init1();void ByName();void ByTime();string WORD2string(WORD w);int main(){    int j;    Init1();    while (true)    {        cout << "请选择检索文件方式:" << endl;//界面友好        cout << "     1.文件名检索" << endl;        cout << "     2.创建时间检索" << endl;        cout << "     0.退出系统" << endl;        cin >> j;        if (j == 0)  break;//0则退出        else if (j == 1)//1则通过名字查询        {            ByName();        }        else if (j == 2)//2则通过时间查询        {            ByTime();        }        else {            cout << "请选择0,1,2中的一个!" << endl;        }    }    return 0;}/****数据结构初始化*/void Init1()//我不明白为什么到这就堆栈溢出了,汇编代码也没看懂{    int i;    ifstream fp[1000];    //用10000个文件读的对象    string which = "";    string file[1000];    LPCSTR s1;    //参数类型转换    WIN32_FIND_DATAA   filestruct;//搜索文件属性    handle_t  hf;    //句柄指针    for (i = 0; i < 1000; i++)    //初始化,将1000个页面的信息读到数据结构中    {        which = to_string(i);        file[i] = "D:\\xukai\\学习\\操作系统实验\\网页\\" + which + ".html ";        fp[i].open(file[i], std::ios::binary);        //打开文件失败        if (!fp[i].is_open())        {            cout << "请求文件" << which + ".html" << "不存在" << endl;        }        else//打开文件成功并读取        {            f[i].Nam = which + ".html";            s1= file[i].c_str();    //转换参数类型            //cout << s1<< endl;            hf = FindFirstFileA(s1, &filestruct);//用一个特别的函数,在这里我解决了函数参数类型问题,简直太牛逼了!!!            f[i].t = filestruct.ftLastWriteTime;//文件上次修改时间                 char buffer[1024];            while (fp[i].good() && !fp[i].eof())            {                fp[i].getline(buffer, 1024);                //将读取的内容追加入info中                f[i].info.append(buffer);                buffer[0] = '\0';             }            fp[i].close();        }    }    FindClose(hf);}/***通过文件名搜索文件*/void ByName(){    string name;    int i;    cout << "请输入要搜索的文件名:";    cin >> name;    for (i = 0; i < 1000; i++)    {        if (strcmp(name.c_str(), f[i].Nam.c_str()) == 0)//比较文件名        {            cout << f[i].info << endl;//输出文件内容            break;        }    }    if (i == 1000) cout << "查无此文件!或者输入有误" << endl;///报错}/******通过时间搜索文件*/void ByTime(){    string str, str1;//用户输入的时间字符串    int i;    //bool judge;  //判断FileTimeToSystemTime函数是否成功    SYSTEMTIME st;//用于类型转换的    cout << "请输入要搜索文件的创建时间(格式为:YYYY-M-D):";    cin >> str1;    for (i = 0; i < 1000; i++)    {        FileTimeToSystemTime(&(f[i].t), &st);//将FILETIME转换成SYSTEMTIME的        //cout << judge << endl;        st.wHour = (st.wHour+8) % 24;//解决类型转换后慢8小时问题        str = WORD2string(st.wYear) + "-" + WORD2string(st.wMonth) + "-" + WORD2string(st.wDay); /*调整格式转化成string格式的*/        //cout << str << endl;        if (strcmp(str1.c_str(), str.c_str()) == 0)//比较找到文件        {            cout << f[i].info << endl;            break;        }    }    if (i == 1000) cout << "查无此创建时间!或者输入有误" << endl;//报错}/*****WORD转成string函数,自己写的*/string WORD2string(WORD w){    char tmpbuff[16];    sprintf_s(tmpbuff, "%d", w);    string res = tmpbuff;    return res;}

 

我知道是因为我的静态变量太大了,所以导致了栈溢出,这个可以解决,但是下面的问题就解决不出来了:

 

程序会在这里死循环,我不太能看懂这里的原因,所以报告就在这里抛锚了。。GG

但是!!!!!!!!!!!!!!!

我的代码又起死回生了23333!!

我知道问题的原因,于是我把数据改成了1000个,因为10000实在太大了,也怪我没有用动态内存,于是我的代码可以跑了,但是这还不算什么,后面我又碰到了函数参数类型错误的问题,但是!!!都被我一一解决了,成就感爆棚!!无法描述我的喜悦和激动,恩就这样。下面是我的结果贴图:

 

 

.分析与感悟

分析和感悟什么的其实是有的,这次的报告实际上并不难,但是开始可能不太好理解他的意思,等我理解后就好写了,占用的内存确实很大,也没有用动态内存,很难的地方就是读文件的各种属性,不过也学到好多,第二个难点就是将那个文件的属性再变成字符串,这大概就是最大的难点了吧,后来我避开了因为栈溢出而导致的死循环问题,又查阅了大量资料解决了后面的bug,经历千辛万苦终于修成正果,这次的实验真的是查了相当多的材料,学了好多东西,后面我会好好搞一下动态内存的东西,以后面对比较大的变量的时候可以游刃有余。编程真是件有趣的事情~

 

三.参考材料

1.

2.

3.

4.

5.

6.都是为了提取文件的属性

7.

8.

9. 以上都是为了解决时间转字符串

10.解决头文件问题

11.

12.

13.

14.

15.

16. 以上是为了解栈溢出问题

17.

18.WORD类型转string类型

19. 

20.http://baike.baidu.com/link?url=EYTiA-BaIjaJ60Mn_BXp6iNTF9K-DyZIWnvWMYSOkscQXCkw8AZqX1gv0fM0DDdWJgvb05_DEHL12xf9OtuWp505B2ng_vzM71jZUihgRLC   filetimetosystem函数的应用

21. FileTimeToSystemTime的注意事项

22. filetimetosystem函数

23. findfirstfile函数详解

24.查看函数定义

 

 

转载于:https://www.cnblogs.com/xukaiae86/p/6445008.html

你可能感兴趣的文章
iOS 改变tableview cell的背景色
查看>>
大型机、小型机、x86服务器的区别
查看>>
Java集合(二)--Iterator和Iterable
查看>>
Net学习日记_基础提高_2
查看>>
TableView头视图高度问题
查看>>
PHP——大话PHP设计模式——命名空间和类的自动载入
查看>>
06_Python的数据类型3元组,集合和字典_Python编程之路
查看>>
【BZOJ2120】—数颜色(带修莫队)
查看>>
JavaScript 扩展方法 trim 去除指定字符串
查看>>
if函数判断日期在某个时间段
查看>>
Windows10关闭自动更新
查看>>
半平面交模板
查看>>
mysql入门
查看>>
[USACO08NOV]奶牛混合起来Mixed Up Cows
查看>>
LOJ 2483: 洛谷 P4655: 「CEOI2017」Building Bridges
查看>>
常用博客Metaweblog Api地址
查看>>
5-9
查看>>
Oracle 联机重做日志文件(ONLINE LOG FILE)
查看>>
Say“No”,你学会了吗?
查看>>
ios多线程-GCD基本用法
查看>>