网站首页 > 文章中心 > 其它

vbnet文件管理器

作者:小编 更新时间:2023-08-12 17:58:37 浏览量:339人看过

[VB.NET]当前活动资源管理器窗口某文件夹被选定,请问获取该选定的文件夹的路径?

OpenFileDialog openFile = new OpenFileDialog();

openFile.Multiselect = true;

openFile.Filter = "图片 (*.jpg)|*.jpg|所有文件 (*.*)|*.*";

if (openFile.ShowDialog() == DialogResult.OK)

{

vbnet文件管理器-图1

string ss = openFile.FileName;

File.Copy(ss, @"..\..\picture\" + Path.GetFileName(ss));

}

上面是先获取路径,在把图片复制到指定路径下.

什么是vb.net解决方案

用VB做一个文件管理器 如下图

已经做得差不多了呀,不过为了效率和广泛性,建议使用API来操作文件,而不是FSO对象

建议增加打开文件、移动文件、重命名文件、查看文件属性的功能

vbnet文件管理器-图2

操作文件需要的API及声明:

复制文件:

Private?Declare?Function?NtReadFile?Lib?"NTDLL.DLL"?(ByVal?Handle?As?Long,?ByVal?Events?As?Long,?ByVal?ApcRoutine?As?Long,?ByVal?ApcContext?As?Long,?ByVal?IoStatus?As?Long,?ByVal?Buffer?As?Long,?ByVal?Length?As?Long,?Optional?ByVal?Number?As?Long,?Optional?ByVal?Keys?As?Long)?As?Long

Private?Declare?Function?NtWriteFile?Lib?"NTDLL.DLL"?(ByVal?Handle?As?Long,?ByVal?Events?As?Long,?ByVal?ApcRoutine?As?Long,?ByVal?ApcContext?As?Long,?ByVal?IoStatus?As?Long,?ByVal?Buffer?As?Long,?ByVal?Length?As?Long,?Optional?ByVal?Number?As?Long,?Optional?ByVal?Keys?As?Long)?As?Long

删除文件:

Private?Declare?Function?NtCreateFile?Lib?"NTDLL.DLL"?(ByRef?FileHandle?As?Long,?ByVal?DesiredAccess?As?Long,?ObjectAttributes?As?Any,?IoStatusBlock?As?Any,?Allocation?As?Long,?ByVal?FileAttributes?As?Long,?ByVal?ShareAccess?As?Long,?ByVal?CreateDisposition?As?Long,?ByVal?CreateOptions?As?Long,?ByVal?EaBuffer?As?Long,?ByVal?EaLength?As?Long)?As?Long

Private?Declare?Function?NtSetInformationFile?Lib?"NTDLL.DLL"?(ByVal?FileHandle?As?Long,?IoStatusBlock?As?IO_STATUS_BLOCK,?FileInformation?As?Any,?ByVal?Length?As?Long,?ByVal?FileInformationClass?As?Long)?As?Long

Private?Declare?Function?NtDeleteFile?Lib?"NTDLL.DLL"?(ObjectAttributes?As?OBJECT_ATTRIBUTES)?As?Long

移动文件:

重命名文件:

以上操作都通用:

SHFileOperation

创建、打开文件(夹):

查看文件属性:

vb.net 磁盘文件列表,界面如图,在.net下如何实现?

预先准备三个图标文件,用于树型控件中显示磁盘符号和文件夹的图像之用.

①.、窗体上添加控件如下:

组合框控件 ComboBox1,树型控件 TreeView1,列表框控件 ListBox1,图像列表控件 ImageList1.

选中TreeView1,设置其ImageList属性为ImageList1.

vbnet文件管理器-图3

运行图如下:

完整代码如下:

Imports?System.IO

Public?Class?Form1

Private?Sub?Form1_Load(ByVal?sender?As?System.Object,?ByVal?e?As?System.EventArgs)?Handles?MyBase.Load

'添加系统所有磁盘目录符号

For?Each?MyDrive?As?String?In?Environment.GetLogicalDrives()

ComboBox1.Items.Add(MyDrive)

Next

'显示第一个磁盘符号

ComboBox1.Text?=?ComboBox1.Items(0)

End?Sub

'递归过程添加目录树

Public?Sub?AddDirectory(ByVal?strFatherPath?As?String,?ByVal?strPath?As?String,?ByVal?nodeFather?As?TreeNode)

Dim?i?As?Integer

Dim?Mynode?As?New?TreeNode

'先添加本目录

Mynode.Text?=?Strings.Replace(strPath,?strFatherPath?"\",?"",?,?1)

'为节点指定未被选中时显示的图标

Mynode.ImageIndex?=?1

'为节点指定被选中时显示的图标

nodeFather.Nodes.Add(Mynode)

Application.DoEvents()

Try

Dim?str()?As?String?=?Directory.GetDirectories(strPath)

'递归遍历该目录的子文件夹

For?i?=?0?To?str.GetUpperBound(0)

AddDirectory(strPath,?str(i),?Mynode)

Catch?ex?As?Exception

Debug.WriteLine(ex.Message)

End?Try

Mynode?=?Nothing

'根据给出的盘符添加目录树

Private?Sub?AddRootDirectory(ByVal?DiscSymbol?As?String)

Dim?Nynode?As?New?TreeNode

'先把磁盘盘符添加到树中

TreeView1.Nodes.Clear()

Nynode.ImageIndex?=?0

Nynode.Text?=?DiscSymbol

Nynode.SelectedImageIndex?=?-1

TreeView1.Nodes.Add(Nynode)

'获取磁盘根目录下的文件夹

Dim?str()?As?String?=?Directory.GetDirectories(DiscSymbol?"\")

'调用递归过程遍历该文件夹里的所有子文件夹,并添加到树型控件

AddDirectory(DiscSymbol,?str(i),?Nynode)

Nynode?=?Nothing

Private?Sub?ComboBox1_SelectedIndexChanged(ByVal?sender?As?System.Object,?ByVal?e?As?System.EventArgs)?Handles?ComboBox1.SelectedIndexChanged

'根据磁盘符号的变更,显示根目录里的文件

ListBox1.Items.Clear()

For?Each?MyFile?As?String?In?System.IO.Directory.GetFiles(ComboBox1.Text)

ListBox1.Items.Add(MyFile)

'根据磁盘符号的变更,重新显示目录树

Dim?DiscSymbol?As?String

DiscSymbol?=?Microsoft.VisualBasic.Left(ComboBox1.Text,?Len(ComboBox1.Text)?-?1)

Call?AddRootDirectory(DiscSymbol)

'递归过程根据子目录寻找上级目录名--从而构成完整的目录路径

Private?Sub?AllPath(ByVal?ThisNode?As?TreeNode,?ByRef?MyPathName?As?String)

If?ThisNode.Level?1?Then

'该节点层数大于1,其父节点不是磁盘根目录

MyPathName?=?ThisNode.Parent.Text?"\"?MyPathName

Dim?MyNode?As?TreeNode?=?ThisNode.Parent

Call?AllPath(MyNode,?MyPathName)

Else

'该节点层数等于1,其父节点就是磁盘根目录

MyPathName?=?ComboBox1.Text?MyPathName

End?If

Private?Sub?TreeView1_AfterSelect(ByVal?sender?As?System.Object,?ByVal?e?As?System.Windows.Forms.TreeViewEventArgs)?Handles?TreeView1.AfterSelect

'为了搜索选中的节点对应目录的文件,需要组成全路径

Dim?MyAllPathName?As?String?=?TreeView1.SelectedNode.Text

Dim?MyNode?As?TreeNode?=?TreeView1.SelectedNode

If?TreeView1.SelectedNode.Level?=?0?Then

'如果选中的是根节点

MyAllPathName?=?ComboBox1.Text

'如果选中的是非根节点,调用递归过程组成全路径

Call?AllPath(MyNode,?MyAllPathName)

MyAllPathName?=?MyAllPathName?"\"

'根据路径,搜索文件名并显示

For?Each?MyFile?As?String?In?System.IO.Directory.GetFiles(MyAllPathName)

End?Class

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章