2009-09-16 68 views
0

我使用的是2008年的C#,.NET 3.5,IIS 7.0和ASP.NET。我也使用Silverlight 3.0。我想在客户端读取USB闪存盘的内容,使用USB闪存盘中的信息作为用户配置文件标识符 - 就像在线银行服务使用USB密钥来存储客户端证书一样(但我的安全要求并不高)。读取USB闪存盘问题

如何读取Web应用程序(客户端)中USB闪存盘中特定文件的内容?我们可以在Silverlight中做到这一点吗(如果不能,任何替代解决方案来读取USB闪存盘内容)?

顺便说一句:我想自动读取内容,并且我不希望用户手动选择USB闪存盘上的特定文件进行读取。

回答

7

你不能在Silverlight中做到这一点。您可以在用户的​​计算机上读取文件,但无需用户干预。内置于Silverlight中的安全模型将不允许使用它。

您可以做的最好的方法是阅读用户指定的文件,让他们用 文件打开对话框浏览。

如果您在本地使用控制台/ Windows窗体/ WPF应用程序,则可以访问USB /闪存驱动器。您可以使用DriveInfo类找到驱动器,然后遍历它们或使用LINQ查询来查找要访问的驱动器。有关详细信息,请参阅堆栈溢出问题“How to find USB drive letter?”。一旦你有一个路径,你可以搜索它所需的文件。您不需要特殊的API或库,Windows操作系统会将USB驱动器视为普通驱动器,与连接到系统的“永久”HDD相同,并且会在该级别为您执行所有肮脏的工作。只需使用.NET I/O类。但是,如果您希望以不依赖于任何操作系统的独立方式访问驱动器,则应使用第三方库。

+0

感谢克里斯,如果我开发一个客户端应用程序(控制台应用程序),是可以枚举所有USB驱动器,并找到一个具有内部的特定文件阅读?我的困惑是,我不知道如何识别/枚举本地计算机的所有USB闪存盘。 – George2 2009-09-16 05:13:32

+1

Silverlight阻止您看到用户机器上的任何文件/驱动器。但是,您可以使用OpenFileDialog将文件流传输到用户提供的文件。 – 2009-09-16 07:47:23

+0

谢谢!如果我决定编写客户端应用程序,例如控制台或Windows窗体应用程序,是否可以枚举所有USB闪存盘以查找特定文件(如我们可以为普通IDE硬盘所做的那样)?我不确定是否有任何限制来枚举控制台应用程序或Windows窗体/ WPF应用程序的特定文件的所有USB闪存盘? – George2 2009-09-16 07:53:04

1

我不认为你所要求的是可能的。如果它IS可能,这是可怕的东西......为了让一个网站能够在没有用户干预的情况下获取内容?嗯,嗯。没办法\

编辑 - 阅读评论

只使用标准架构,没有后添加。 USB支持不是标准配置。你会认为在USB端口的System.IO命名空间中会有类似COM端口的类,但是没有这样的运气。但是,有一些库可以处理这个问题。这里有一些让你开始的链接。

http://weblogs.asp.net/israelio/archive/2005/08/15/422637.aspx

http://www.icsharpcode.net/OpenSource/SharpUSBLib/

+0

感谢大卫,如果我正在开发一个客户端应用程序(控制台应用程序),是否有可能枚举所有USB驱动器并找到一个内部具有特定文件的文件?我的困惑是,我不知道如何识别/枚举本地计算机的所有USB闪存盘。 – George2 2009-09-16 05:15:10

+0

谢谢大卫!如果我只需要从USB闪存盘读取文件,我想我只需要使用.Net IO API,为什么我需要使用您提到的特殊库?这种API和使用.Net IO API之间的任何功能差异? – George2 2009-09-16 15:44:52

+0

我有这方面的担忧,因为在我的计算机中,USB闪存盘显示为普通磁盘驱动器,我可以在普通Windows文件资源管理器中访问USB闪存盘中的文件。 – George2 2009-09-16 15:48:54