Ubuntu系统下如何使用C#访问已挂载文件夹中的文件?
问题解答
你需要使用AFP共享对应的本地挂载路径,而非afp://开头的URI格式路径。afp://属于网络资源协议地址,不是Linux系统标准的POSIX文件路径格式,.NET的System.IO相关文件操作API无法识别这类地址,才会将其误判为相对路径。
操作步骤
- 第一步:查询本地挂载路径
Ubuntu系统中gio挂载的网络共享默认会映射到GVFS目录下,路径规则为/run/user/[当前用户UID]/gvfs/。普通用户的默认UID为1000,你可以直接执行以下命令查看所有已挂载的网络共享对应的本地目录:ls /run/user/$(id -u)/gvfs/
输出中对应AFP共享的目录名一般为afp:host=ServerName.local,user=myusername,share=sharedDirectory格式,拼接后得到的完整路径比如/run/user/1000/gvfs/afp:host=ServerName.local,user=myusername,share=sharedDirectory/就是可被C#文件API识别的有效路径。 - 第二步:替换代码中的路径
将你代码中原来的afp://myusername@ServerName.local/sharedDirectory/替换为上一步得到的本地绝对路径即可,Path.GetFullPath()、Directory.EnumerateFiles()等方法都可以正常对该路径执行操作。
补充说明
如果需要程序动态获取对应AFP共享的挂载路径,可以在C#中调用gio mount -l命令解析输出结果,或直接遍历/run/user/[UID]/gvfs/下的目录,匹配对应共享的服务名、用户名等信息即可拿到目标路径。
内容的提问来源于stack exchange,提问作者Lance Albertson
相关产品推荐
相关产品推荐

