好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

c程序设计(第2版) 教学课件 作者 赵震奇 教案 项目十四 模拟资源管理器(2).doc

5页
  • 卖家[上传人]:E****
  • 文档编号:102538120
  • 上传时间:2019-10-03
  • 文档格式:DOC
  • 文档大小:212KB
  • / 5 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 教案教 师班级科 目开课时间地 点课题名称项目十四 模拟资源管理器(2)课时数6背景分析资源管理器的主要功能是列出系统中的所有逻辑驱动器、所有目录和文件学习目标设 定动态链接库kernel32.dllDirectory类及GetDirections等相关方法Path类及GetExtension等相关方法学习任务描 述列出系统中的所有逻辑驱动器,显示在主窗体的树视图中,并列出硬盘中的所有目录和文件其中的难点主要是动态链接库kernel32.dll的使用参照真实Windows系统资源管理器界面教学情境创 设实现资源管理器的主要功能教学资源准 备建议配置:2.2 GHz 或速度更快的 CPU、1GB或更大容量的 RAM、1280x1024 显示器、7200 RPM 或更高转速的硬盘;操作系统:Windows 7或以上;开发软件:Visual Studio 2012 中文版(含MSDN);提供真实Windows系统资源管理器画面作为参照(如图4-1所示)教 学 过 程 实 施内 容方法显示Windows系统驱动器内容【任务描述】(该任务的内容和目的)列出系统中的所有逻辑驱动器,显示在主窗体的树视图中,并列出硬盘中的所有目录和文件。

      其中的难点主要是动态链接库kernel32.dll的使用参照真实Windows系统资源管理器界面任务实施】(完成此任务所需要的主要步骤)1、需使用动态链接库kernel32.dll中的非托管代码,所以在类中添加以下代码: [DllImport("kernel32")] static extern uint GetDriveType(string name); // 该函数用来获取磁盘的大小和可用空间 [DllImport("kernel32")] static extern bool GetDiskFreeSpaceEx(string lpDirectoryName, ref long lpFreeBytesAvailable, ref long lpTotalNumberOfBytes, ref long lpTotalNumberOffFreeBytes);2、获取所有逻辑盘并列出硬盘中的所有目录public void ListDrives() { TreeNode tn = new TreeNode("所有逻辑盘"); // 获取系统中的所有逻辑盘 string[] drives = Directory.GetLogicalDrives(); // 向树视图中添加节点 tvDir.BeginUpdate(); for (int i = 0; i < drives.Length; i++) { // 根据驱动器的不同类型来确定所进行的操作 switch (GetDriveType(drives[i])) { case 2: // 软驱 // 仅向树视图中添加节点而不列举它的目录 // 它的图像索引以及处于选择状态下的图像索引分别为 0和 0 tn = new TreeNode(drives[i], 0, 0); break; case 3: // 硬盘 // 除了向树视图中添加节点外还要列举它的目录 tn = new TreeNode(drives[i], 1, 1); ListDirs(tn, drives[i]); // 列举硬盘中的目录 break; case 5: // 光驱 // 仅向树视图中添加节点 tn = new TreeNode(drives[i], 2, 2); break; } tvDir.Nodes.Add(tn); // 把创建的节点添加到树视图中 } tvDir.EndUpdate(); // 把C盘设为当前选择节点 tvDir.SelectedNode = tvDir.Nodes[0]; }3、列出指定目录private void ListDirs(TreeNode tn, string strDir) { string[] arrDirs; TreeNode tmpNode; try { // 获取指定目录下的所有目录 arrDirs = Directory.GetDirectories(strDir); if (arrDirs.Length == 0) return; // 把每一个子目录添加到参数传递进来的树视图节点中 for (int i = 0; i < arrDirs.Length; i++) { tmpNode = new TreeNode(Path.GetFileName(arrDirs[i]), 3, 4); // 对于每一个子目录,都进行递归列举 ListDirs(tmpNode, arrDirs[i]); tn.Nodes.Add(tmpNode); } } catch { return; } }运行结果如图4-7所示图4-7 运行结果4.列出指定目录下的所有子目录和文件 private void ListDirsAndFiles(string strDir) { ListViewItem lvi; int nImgIndex; string[] items = new string[4]; string[] dirs; string[] files; try { // 获取指定目录下的所有子目录 dirs = Directory.GetDirectories(strDir); // 获取指定目录下的所有文件 files = Directory.GetFiles(strDir); } catch { return; } // 把子目录和文件添加到文件列表视图中 LvFiles.BeginUpdate(); // 清除列表视图中的所有内容 LvFiles.Clear(); // 加4个列表头 LvFiles.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { chName, chSize, chType, chTime }); // 把子目录添加到列表视图中 for (int i = 0; i < dirs.Length; i++) { items[0] = Path.GetFileName(dirs[i]); items[1] = ""; items[2] = "文件夹"; items[3] = Directory.GetLastWriteTime(dirs[i]).ToLongDateString() + "" + Directory.GetLastWriteTime(dirs[i]).ToLongTimeString(); lvi = new ListViewItem(items, 3); LvFiles.Items.Add(lvi); } // 把文件添加到列表视图中 for (int i = 0; i < files.Length; i++) { string ext = (Path.GetExtension(files[i])).ToLower(); // 根据不同的扩展名,来设定列表项的图标 if (ext == ".txt") { nImgIndex = 5; } 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.