基本信息
源码名称:C# 简单文件浏览器源代码
源码大小:0.04M
文件格式:.rar
开发语言:C#
更新时间:2016-02-16
   源码介绍


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Management;
using System.Globalization;
using System.IO;

namespace MiniExplorer
{
   
   //用TreeView实现文件浏览器 
   public partial class frmMiniExplorer : Form
   {
      private const int Removable = 2;
      private const int LocalDisk = 3;
      private const int Network = 4;
      private const int CD = 5;
      
      public frmMiniExplorer()
      {
         InitializeComponent();
      }
      
      private void frmMiniExplorer_Load(object sender, EventArgs e)
      {
         LoadDrives();
         LoadListView();
      }
      
      //加载物理磁盘驱动器 
      private void LoadDrives()
      {
         TreeNode nodeTemp = null;
         int imageIndex = 0;
         int selectIndex = 0;
         
         this.Cursor = Cursors.WaitCursor;
         
         tvFolders.Nodes.Clear();
         nodeTemp = new TreeNode("My Computer", 0, 0);
         tvFolders.Nodes.Add(nodeTemp);//加载根目录 
         
         TreeNodeCollection nodeCollection = nodeTemp.Nodes;
         
         //用System.Management对象获取驱动器列表 
         ManagementObjectCollection queryCollection = GetDriveList();
         
         foreach (ManagementObject mo in queryCollection)
         {
            switch (int.Parse(mo["DriveType"].ToString()))
            {
               case Removable: //Removable Drives
               imageIndex = 5;
               selectIndex = 5;
               break;
               case LocalDisk: //硬盘
               imageIndex = 6;
               selectIndex = 6;
               break;
               case CD: //光驱
               imageIndex = 7;
               selectIndex = 7;
               break;
               case Network: //网络磁盘
               imageIndex = 8;
               selectIndex = 8;
               break;
               default: //预设显示目录图标
               imageIndex = 2;
               selectIndex = 3;
               break;
            }
            
            //建立驱动器 
            nodeTemp = new TreeNode(mo["Name"].ToString()   "\\", imageIndex, selectIndex);
            nodeCollection.Add(nodeTemp);
         }
         
         this.Cursor = Cursors.Default;
      }
      
      private void tvFolders_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
      {
         this.Cursor = Cursors.WaitCursor;
         TreeNode nodeCurrent = e.Node;
         nodeCurrent.Nodes.Clear();
         if (nodeCurrent.SelectedImageIndex == 0)
         LoadDrives();
         else
         LoadDirectory(nodeCurrent, nodeCurrent.Nodes);
         this.Cursor = Cursors.Default;
      }
      
      protected void LoadListView()
      {
         lvFiles.Clear();
         
         //创建ListView的标题列 
         lvFiles.Columns.Add("Name", 150, System.Windows.Forms.HorizontalAlignment.Left);
         lvFiles.Columns.Add("Size", 75, System.Windows.Forms.HorizontalAlignment.Right);
         lvFiles.Columns.Add("Created", 140, System.Windows.Forms.HorizontalAlignment.Left);
         lvFiles.Columns.Add("Modified", 140, System.Windows.Forms.HorizontalAlignment.Left);
         
      }
      
      protected void LoadDirectory(TreeNode nodeCurrent, TreeNodeCollection nodeCurrentCollection)
      {
         TreeNode nodeTemp = null;
         
         int imageIndex = 2; //当前结点的图片 
         int selectIndex = 3; //选中结点时显示的图片 
         
         if (nodeCurrent.SelectedImageIndex != 0)
         {
            try
            {
               if (Directory.Exists(FormatPath(nodeCurrent.FullPath)) == false)
               throw new Exception("目录或路路径不存在!");
               
               LoadFiles(nodeCurrent);
               
               string[] stringDirectories = Directory.GetDirectories(FormatPath(nodeCurrent.FullPath));
               string stringFullPath = "";
               string stringPathName = "";
               
               //加载当前目录下所有子目录 
               foreach (string stringDir in stringDirectories)
               {
                  stringFullPath = stringDir;
                  stringPathName = GetPathName(stringFullPath);
                  
                  TreeNode nodeDir = new TreeNode(stringPathName.ToString(), imageIndex, selectIndex);
                  nodeCurrentCollection.Add(nodeDir);
               }
            }
            catch (Exception e)
            {
               MessageBox.Show(e.Message);
            }
         }
      }
      
      protected string GetPathName(string stringPath)
      {
         string[] stringSplit = stringPath.Split(’\\’);
         return stringSplit[stringSplit.Length - 1];
      }
      
      //加载当前目录下的文件 
      protected void LoadFiles(TreeNode nodeCurrent)
      {
         string[] listviewData = new string[4];
         this.LoadListView();
         
         if (nodeCurrent.SelectedImageIndex != 0)
         {
            if (Directory.Exists((string)FormatPath(nodeCurrent.FullPath)) == false)
            throw new Exception("目录或路路径不存在!");
            
            try
            {
               string[] stringFiles = Directory.GetFiles(FormatPath(nodeCurrent.FullPath));
               DateTime dtCreateDate, dtModifyDate;
               Int64 lFileSize = 0;
               
               foreach (string stringFile in stringFiles)
               {
                  FileInfo objFileSize = new FileInfo(stringFile);
                  lFileSize = objFileSize.Length;
                  dtCreateDate = objFileSize.CreationTime;
                  dtModifyDate = objFileSize.LastWriteTime;
                  
                  listviewData[0] = GetPathName(stringFile);
                  listviewData[1] = FormatSize(lFileSize);
                  
                  if (TimeZone.CurrentTimeZone.IsDaylightSavingTime(dtCreateDate) == false)
                  listviewData[2] = FormatDate(dtCreateDate.AddHours(1));
                  else
                  listviewData[2] = FormatDate(dtCreateDate);
                  
                  if (TimeZone.CurrentTimeZone.IsDaylightSavingTime(dtModifyDate) == false)
                  listviewData[3] = FormatDate(dtModifyDate.AddHours(1));
                  else
                  listviewData[3] = FormatDate(dtModifyDate);
                  
                  ListViewItem lvItem = new ListViewItem(listviewData, 0);
                  lvFiles.Items.Add(lvItem);
               }
            }
            catch (Exception e)
            {
               MessageBox.Show(e.Message);
            }
         }
      }
      
      //替代Root是My Computer 
      protected string FormatPath(string stringPath)
      {
         string stringParse = stringPath.Replace("My Computer\\", "");
         return stringParse;
      }
      
      //获取所有磁盘驱器 
      protected ManagementObjectCollection GetDriveList()
      {
         ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT * From Win32_LogicalDisk ");
         ManagementObjectCollection queryCollection = query.Get();
         return queryCollection;
      }
      
      //转换为短日期格式 
      protected string FormatDate(DateTime dtDate)
      {
         string stringDate = "";
         stringDate = dtDate.ToShortDateString().ToString()   " "   dtDate.ToShortTimeString().ToString();
         return stringDate;
      }
      
      
      //将文件大小转换为带KB的字符串 
      protected string FormatSize(Int64 lSize)
      {
         string stringSize = "";
         NumberFormatInfo numInfo = new NumberFormatInfo();
         
         if (lSize < 1024) //小于1KB
         {
            if (lSize == 0)
            stringSize = "0";
            else
            stringSize = "1";
         }
         else
         {
            Int64 lKBSize = lSize / 1024; //转折为MB / 1024 
            stringSize = lKBSize.ToString("n", numInfo);
            stringSize = stringSize.Replace(".00", "");
         }
         return stringSize   " KB";
      }
   }
}