操作系统实验报告五

简介:      操作系统实验报告五                          姓名:许恺                       学号:2014011329                       日期:12.

 

 

 

 

 

 

操作系统实验报告五

 

 

 

                       姓名:许恺

                       学号: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.http://bbs.csdn.net/topics/390348063 提取文件属性

2.http://blog.sina.com.cn/s/blog_4d1e14550100aui4.html

3.https://technet.microsoft.com/zh-cn/library/system.io.file.getlastwritetime(v=vs.85).aspx?cs-save-lang=1&cs-lang=cpp#code-snippet-1

4.http://blog.sina.com.cn/s/blog_793c41ec0100ve8w.html

5.http://baike.baidu.com/link?url=_VqzJfwTXMv6D2ifOfTmFF7qhyWNXPOtMr1_9FqiA1I7uLwOWpXF4A8FgiRhmclUfNSSb4oX3hvLjfmqmz9enguPGTe7Cm70JDR6gDQhKQG

6.http://blog.csdn.net/huapeng_guo/article/details/7614978都是为了提取文件的属性

7.http://bbs.csdn.net/topics/390747683

8.http://blog.csdn.net/tracyzhongcf/article/details/3711684

9.http://baike.baidu.com/link?url=PH__h-pRiHIa7ShO9NgnkP37X7wRWoqeBHQp_Ga2yHcVB2ujUryXQm1yIfreQqz2lAtjRLHvQNU2DRcxgnFPq0WACLLXr9vG1NGQHG2foLNM45lDTjVkwtS4y_L_RM6h 以上都是为了解决时间转字符串

10.http://blog.csdn.net/renyhui/article/details/51165066解决头文件问题

11.http://vopit.blog.51cto.com/2400931/559787

12.https://zhidao.baidu.com/question/210718525.html

13.http://blog.csdn.net/brook0344/article/details/8126017

14.http://blog.csdn.net/ldd530314297/article/details/42551793

15.http://bbs.csdn.net/topics/390438875

16.http://wuliang20080412.blog.163.com/blog/static/905220552010320018881/ 以上是为了解栈溢出问题

17.http://weihe6666.iteye.com/blog/1440723

18.https://zhidao.baidu.com/question/521221386.html?qbl=relate_question_3&word=WORD%20%D7%AA%CE%AAstringWORD类型转string类型

19.http://bbs.csdn.net/topics/145726 

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

21.http://blog.sina.com.cn/s/blog_66ec4d660101bv9t.html FileTimeToSystemTime的注意事项

22.http://bbs.csdn.net/topics/50035890 filetimetosystem函数

23.https://zhidao.baidu.com/question/324197690.html findfirstfile函数详解

24.查看函数定义

 

 

相关文章
|
4月前
|
弹性计算 运维
阿里云操作系统智能助手OS Copilot实验测评报告
**OS Copilot 产品体验与功能反馈摘要** 运维人员发现OS Copilot易上手,文档清晰,助其高效排查故障(8/10分)。愿意推荐并参与开源开发。亮点在于知识问答,能快速筛选答案。相较于竞品,优点是新手友好、文档清晰,但功能扩展性待增强。期望增加系统错误排查与解决方案,并集成ECS等,以优化系统安装流程。
阿里云操作系统智能助手OS Copilot实验测评报告
|
4月前
|
运维 自然语言处理 弹性计算
阿里云操作系统智能助手OS Copilot实验测评报告
摘要: 体验阿里云OS Copilot活动,用户发现教程中存在步骤缺失和不明确之处,如服务器地区未明确、安全组配置细节不全、AccessKey创建过程复杂、代码示例需改进等。用户建议提供详细步骤,尤其是对于新手,以提高易用性。OS Copilot作为智能助手,其问答和编程辅助功能受到好评,但实验应展示更多连续交互能力。用户总体满意产品,期待更完善的引导。
237 8
阿里云操作系统智能助手OS Copilot实验测评报告
|
4月前
|
弹性计算 运维 自然语言处理
阿里云操作系统智能助手OS Copilot实验测评报告
OS Copilot是阿里云Linux的智能助手,助于提升运维效率,通过学习用户习惯提供智能建议。开发者反馈其在DevOps场景中非常有用,给予10分帮助度评价。用户赞赏其命令执行功能,希望能扩展多命令执行和错误自动修正。与ACK、ECS等集成,可自动化部署和CI/CD流程。文档清晰,适合新手,用户愿意推荐并参与开源开发。
103 3
阿里云操作系统智能助手OS Copilot实验测评报告
|
4月前
|
弹性计算 运维 自然语言处理
阿里云操作系统智能助手OS Copilot实验测评报告
阿里云OS Copilot是一款专为Linux设计的智能运维助手,利用大语言模型提供自然语言问答、命令执行辅助和系统调优功能。软件维护工程师反馈,OS Copilot易于上手,文档清晰,对提升运维效率有显著帮助,评分10/10。其轻量级设计、准确的回答是主要优点,但可能在复杂场景下表现不足。用户期望扩展到更多Linux发行版,增加系统优化建议、代码优化和日志分析功能,并能与其他产品如ACK、ECS联动。希望能有异常处理提示和日志输出以增强问题定位。
115 14
|
4月前
|
弹性计算 人工智能 运维
阿里云操作系统智能助手OS Copilot实验测评报告
**摘要:** 在阿里云与CSDN联合的OS Copilot测试中,一名学生体验者发现该智能助手是强大的编程学习工具,给予10分的帮助评价。尽管有新手上手难度和兼容性问题,他仍强烈推荐并有意参与开源开发。OS Copilot的亮点包括直接的交互式知识问答、编程辅助及命令执行。相比其他产品,其优点是简洁和准确性,但需改进新手教程。用户期待更多功能,如系统优化建议,扩大操作系统支持,并建议与阿里云产品如ACK、ECS集成,以提升运维效率。
115 12
|
4月前
|
弹性计算 运维 自然语言处理
阿里云操作系统智能助手OS Copilot实验测评报告
OS Copilot是Alibaba Cloud Linux基于大模型构建的操作系统智能助手,其旨在通过自然语言问答、辅助命令执行及系统运维调优等功能,提升用户对Alibaba Cloud Linux的使用效率。
|
4月前
|
弹性计算 运维 自然语言处理
阿里云操作系统智能助手OS Copilot实验测评报告
OS Copilot是针对Linux的智能助手,助力学习、运维及编程。用户界面直观,自然语言交互方便新手。官方文档详尽,但初次配置略复杂,适合学生和开发者。在提高代码编写和调试效率、系统学习上得分高,功能亮点包括代码生成、问答和命令执行。用户期待更多操作系统支持、自动错误分析和系统排查功能。
183 3
|
4月前
|
弹性计算 运维
阿里云操作系统智能助手OS Copilot实验测评报告
简介:体验OS Copilot对于新人使用是友好的,教程给出的比较全面,还支持语言问答,命令执行等优点,还允许用户直接在操作系统内部使用阿里云,完成ECS的实例查询等操作。但是在系统兼容上表现出不足,对于服务器地区不明确。但总体来说测评者对OS Copilot其智能化、高效化、专业化评价是高的。
|
4月前
|
弹性计算 人工智能 运维
阿里云操作系统智能助手OS Copilot实验测评报告
阿里云操作系统智能助手OS Copilot实验测评报告
110 2
|
4月前
|
弹性计算 运维 监控
阿里云操作系统智能助手OS Copilot实验测评报告
阿里云OS Copilot助力学生提升学习效率,简化Linux操作。作为学生,体验者发现它在代码理解和诊断上极具价值,给予新手友好体验,但存在命令执行限制和错误处理问题。评分10/10,愿推荐并参与未来开发。功能上,知识问答、辅助编程和命令执行深受喜爱。对比其他产品,OS Copilot简洁集成,但需改善多命令支持和错误分析。期望支持更多操作系统及与ACK等工具联动,增强系统管理和故障排查。
44 1
下一篇
无影云桌面