C# 使用交互UI获取用户选择的文件(夹)
C# 使用交互UI获取用户选择的文件(夹)
前言
最近在写桌面应用, 记录以下如何使用 WIN 的原生 ui 获取用用户输入的文件与文件夹
依赖
桌面交互依赖于 (WinForm)[https://learn.microsoft.com/zh-cn/dotnet/desktop/winforms/overview/?view=netdesktop-8.0]
项目配置
- 目标框架加上 -windows
- 使用 WinForm
1 |
|
最近在写桌面应用, 记录以下如何使用 WIN 的原生 ui 获取用用户输入的文件与文件夹
桌面交互依赖于 (WinForm)[https://learn.microsoft.com/zh-cn/dotnet/desktop/winforms/overview/?view=netdesktop-8.0]
1 |
|
简要说明, 无序哈希表是 pwsh 对 System.Collections.Hashtable 的包装, 无序哈希表是 pwsh 对 [https://learn.microsoft.com/en-us/dotnet/api/system.collections.specialized.ordereddictionary) 的包装
无序哈希表: @{ <name1> = <value1>; [<name2> = <value2> ] ...}
无序哈希表: [ordered]@{ <name1> = <value1>; [<name2> = <value2> ] ...}
简要说明, 数组是 pwsh 对 System.Array 的包装
创建一般以 @()
格式, 列表是不可变的1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52$data = @()
$null -eq $data[9000] # no exception
Get-Member -InputObject $data
$data.IsFixedSize
$data.GetHashCode()
$data +=1
$data.GetHashCode()
$v1 = ,1
$v2 = 1,2
$v3 = @(1,2,3)
$v4 = 3..5
$v5 = 'a'..'i'
$v6 = 1..-2
[char[]]$v7= 'A','B'
$table = [ordered]@{
'v1'=$v1
'v2'=$v2
'v3'=$v3
'v4'=$v4
'v5'=$v5
'v6'=$v6
'v7'=$v7
}
#
$table
$table.Values.ForEach({$_.GetType()})
$v7 -as [int32[]]
# 65
# 66
$v7[0] -as [int32] # 65
@(66,69,71).ForEach([char])
# B
# E
# G
$v3[-1]
# 3
$v5[-1,-3]
# i
# g
$v5[-1..-3]
# i
# h
# g
$v5[2,3+5..7]
# c
# d
# f
# g
# h
微软在官方文档中对 PSDrive 的描述不尽深入
这些驱动与接口跟以下命令相关:
Get-PSProvider
一般给我们输出以下结果:
Name | Capabilities | Drives |
---|---|---|
Registry | ShouldProcess | {HKLM, HKCU} |
Alias | ShouldProcess | {Alias} |
Environment | ShouldProcess | {Env} |
FileSystem | Filter, ShouldProcess, Credentials | {C, D} |
Function | ShouldProcess | {Function} |
Variable | ShouldProcess | {Variable} |
Certificate | ShouldProcess | {Cert} |
WSMan | Credentials | {WSMan} |
最近写脚本需要用到文件与内容哈希, 在这里作下速记.
pwsh 原生支持文件哈希 Get-FileHash, 但是字符哈希需要手动调用 C# 模块 :