首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何指定手持设备的根?

如何指定手持设备的根?
EN

Stack Overflow用户
提问于 2014-03-04 19:25:16
回答 2查看 117关注 0票数 0

我需要递归地搜索手持设备,查找设备上任何遵循特定模式(如"Platypus.XML")的文件。

要将设备的根传递给我的目录遍历方法,我是传递"\“还是其他什么?

在Windows资源管理器中,设备是"J:\“--但我知道它不能工作,因为它不会为每个人映射到J。

Windows Explorer中该设备的全名如下所示:

代码语言:javascript
复制
Duckbill (\\LEXINGTON\dev\Xmen\Miguel\Installs) (J:)

...but类似地,每个人的设备都会有不同的名称,所以这是行不通的。

那么,根文件夹是否指定为"\“,或者我是否可以调用某些方法来获取该指示符,比如Environment.SpecialFolder.Startup或.?

更新

具体到我的情况,如果Windows Explorer说所讨论的文件夹是“Computer\Goliath‘designate \Application\ccr”,我是否需要以编程方式指定该文件夹:"\Application\ccr"?

更新2

以下代码导致FileNotFound异常,然后导致手持设备上的.exe崩溃:

代码语言:javascript
复制
string clientVer = HHSUtils.GetFileVersion(@"\\Platypus.exe");

public static string GetFileVersion(string filePath)
{
        const int VERSION_DEPTH = 4;
        var version = NativeFile.GetFileInfo(filePath);
        return version.Version.ToString(VERSION_DEPTH);
}

更新3

有以下几点:

代码语言:javascript
复制
string serNum = User.getSerialNo();
string clientVer = DuckbillUtils.GetFileVersion("\\Application\\ccr\\Platypus.exe");
MessageBox.Show(string.Format("serial num == {0}; clientVer == {1}", serNum, clientVer));

...I get:

串珠菌==;clientVer ==;Win32Exception

鉴于以下各点:

代码语言:javascript
复制
string clientVer = DuckbillUtils.GetFileVersion(@"\\Application\ccr\Platypus.exe");

(其他代码行相同;逐字字符串是唯一的区别)

...I get:

串珠菌==;clientVer ==;FileNotFoundException

更新4

我找到了一些很好的信息-- 这里,基于那里的代码:

代码语言:javascript
复制
string modulePath = this.GetType().Assembly.GetModules()[0].FullyQualifiedName;

...this向我展示了我的.exe:

“程序Files\HHS\HHS.exe”

然后,...I试图检查位于(在不同的子文件夹中,但共享相同的祖父母文件夹)的“堂兄”exe:

代码语言:javascript
复制
@"\\Program Files\\LocateNLaunch\\LocateNLaunch.exe"

...but,它没有从GetFileVersion()方法中给出任何信息。

无论如何,我真正想要检查的文件(其版本信息)在其中,而不是文件夹本身,但是由于缺乏知识,什么将称为“子设备”(我不知道术语是什么,但在Windows Explorer中,设备被划分为“子设备”或“超级文件夹”,它们下面有文件夹)。如何表示/指定这是您要访问的内容?我的.exe在一个“子设备”中,.exe的版本信息我需要读取(并可能替换)在另一个“子设备”中.

如果这还不清楚,这里有一个尖叫射击:

那么,如何将我的代码指向Application \sscs文件夹下的文件(HHSetup.exe)?

更新5

使用此代码:

代码语言:javascript
复制
string clientVer = HHSUtils.GetFileVersion(@"\Application\sscs\HHSetup.exe");

...I仍然从那个调用中得到一个空字符串,然后是一个Win32Exception。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-04 22:37:58

设备名称是不相关的,它纯粹是资源管理器Shell扩展技巧。在设备本身上,根始终是\。所有路径都必须从该根完全限定。

我建议在获取本地版本信息之前进行一些测试。类似于:

代码语言:javascript
复制
if(!File.Exists(path))
{
    // don't try, report an error or whatever
}
else
{
    var version = GetFileInfo(path);
}

代码语言:javascript
复制
var fi = new FileInfo(path);
if(!fi.Exists)
{
    // don't try, report an error or whatever
}
else
{
    var version = GetFileInfo(fi.FullName);
}
票数 1
EN

Stack Overflow用户

发布于 2014-03-05 13:57:53

是的,在CE中,所有存储的根都是\。有关详细信息,请参阅此处:理解Windows .NET中的文件系统结构。特别是:

Windows .NET文件系统是一种灵活的模块化设计,允许定制文件系统、过滤器和各种不同的块设备类型。文件系统和所有与文件相关的API都由FileSys.exe进程管理。这个模块实现了对象存储和存储管理器(我们稍后将查看对象存储),并将所有文件系统统一到一个根"\“下的单个系统中。在Windows .NET中,所有文件和文件系统都存在于从"\“开始的单个命名空间中。所有文件都由层次结构树中根的唯一路径标识。

可以将设备安装到根文件系统,并在注册表中HKEY_LOCAL_MACHINE\System\StorageManager\Profiles下标识挂载名称。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22181093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档