2009-09-16 73 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