最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#實(shí)現(xiàn)訪問遠(yuǎn)程硬盤的圖文教程

 更新時(shí)間:2025年05月19日 15:19:08   作者:zhuweisky  
在現(xiàn)實(shí)場(chǎng)景中,我們經(jīng)常用到遠(yuǎn)程桌面功能,而在某些場(chǎng)景下,我們需要使用類似的遠(yuǎn)程硬盤功能,這樣能非常方便地操作對(duì)方電腦磁盤的目錄、以及傳送文件,這次我們將給出一個(gè)完整的Demo來演示遠(yuǎn)程硬盤要怎么實(shí)現(xiàn),需要的朋友可以參考下

引言

在現(xiàn)實(shí)場(chǎng)景中,我們經(jīng)常用到遠(yuǎn)程桌面功能,而在某些場(chǎng)景下,我們需要使用類似的遠(yuǎn)程硬盤功能,這樣能非常方便地操作對(duì)方電腦磁盤的目錄、以及傳送文件。那么,這樣的遠(yuǎn)程硬盤功能要怎么實(shí)現(xiàn)了?

這次我們將給出一個(gè)完整的Demo來演示遠(yuǎn)程硬盤要怎么實(shí)現(xiàn),同時(shí),這個(gè)Demo也給出了個(gè)人網(wǎng)盤是如何實(shí)現(xiàn)的。個(gè)人網(wǎng)盤可以看做是遠(yuǎn)程硬盤應(yīng)用的一個(gè)特例,即,個(gè)人網(wǎng)盤就是訪問服務(wù)器上的一個(gè)特定文件夾。廢話不多說,先上圖看看這個(gè)遠(yuǎn)程硬盤Demo的基本功能。

一. 遠(yuǎn)程硬盤功能展示

打開到對(duì)方的遠(yuǎn)程磁盤后,我們就可以看到對(duì)方電腦的硬盤了,點(diǎn)擊任何一個(gè),就可以訪問該盤下面的文件。

訪問遠(yuǎn)程硬盤

雙擊文件,就可以下載文件到本地;右鍵菜單則可以上傳本地文件到遠(yuǎn)程磁盤。

傳送文件

二. 遠(yuǎn)程硬盤代碼實(shí)現(xiàn)

在實(shí)現(xiàn)遠(yuǎn)程磁盤時(shí),我們分為兩個(gè)層面介紹,一個(gè)是底層業(yè)務(wù)通信層面,另一個(gè)是上層的UI展現(xiàn)層面。

1. 底層業(yè)務(wù)通信實(shí)現(xiàn)

比如,當(dāng)我們使用遠(yuǎn)程磁盤功能時(shí),最常見的就是去獲取對(duì)方電腦某個(gè)目錄下的所有文件及文件夾,那么,這個(gè)功能是怎么實(shí)現(xiàn)的了?

基于ESFramework,實(shí)現(xiàn)這點(diǎn)其實(shí)很簡(jiǎn)單,我們舉例說明。以A用戶作為磁盤的分享者,B用戶作為遠(yuǎn)程磁盤的訪問者,A和B都啟動(dòng)了該Demo的客戶端并登錄。此時(shí),B要訪問A用戶電腦上某個(gè)目錄下的文件列表,那么,B就可以給A發(fā)一個(gè)請(qǐng)求消息,并得到回復(fù),如下所示(NDiskOutter 類的 GetSharedDirectory 方法):     

/// <summary>
/// 獲取目標(biāo)用戶電腦上指定目錄下的文件列表信息。
/// </summary>
/// <param name="ownerID">目標(biāo)用戶的賬號(hào)(磁盤分享者)</param>
/// <param name="clientType">目標(biāo)用戶的設(shè)備類型</param>
/// <param name="netDiskID">網(wǎng)盤的標(biāo)志。(對(duì)于遠(yuǎn)程磁盤而言,即OwnerID為某個(gè)用戶的ID時(shí),該參數(shù)可傳null)。如果是群組共享的文件夾,則可以將其設(shè)置為對(duì)應(yīng)的群組的ID。</param>
/// <param name="dirPath">指定目錄的路徑</param>
/// <returns>目錄下的文件列表信息</returns>
public SharedDirectory GetSharedDirectory(string ownerID,ClientType clientType,string netDiskID ,string dirPath)
{
    ReqDirectoryContract contract = new ReqDirectoryContract(netDiskID, dirPath);
    byte[] res;
    if (!ownerID.Equals(NetServer.SystemUserID)) //遠(yuǎn)程磁盤
    {
        res = this.p2pQueryOutter.Query(ownerID, clientType, this.fileDirectoryInfoTypes.ReqDirectory, CompactPropertySerializer.Default.Serialize<ReqDirectoryContract>(contract), "");
    }
    else //網(wǎng)盤
    {
        res = this.customizeOutter.Query(this.fileDirectoryInfoTypes.ReqDirectory, CompactPropertySerializer.Default.Serialize<ReqDirectoryContract>(contract));
    }
    ResDirectoryContract resContract = CompactPropertySerializer.Default.Deserialize<ResDirectoryContract>(res, 0);
    return resContract.SharedDirectory;
}

無論是網(wǎng)盤,還是遠(yuǎn)程磁盤,都可以通過上述的代碼來進(jìn)行調(diào)用,以獲取對(duì)方電腦指定目錄下的文件列表。

(1)特別注意,上述代碼中紅色字體突出顯示的Query方法,該方法的含義是:向?qū)Ψ剑ɑ蚍?wù)器)發(fā)送 ReqDirectory 請(qǐng)求,并返回對(duì)方的應(yīng)答結(jié)果。

(2)返回的 SharedDirectory 對(duì)象,里面包含了目錄下的文件列表和子文件夾列表,可以通過 FileList 和 SubDirectorys 屬性獲取。

那么,A作為分享方,是如何處理來自B的 ReqDirectory 請(qǐng)求的了?

我們來看看 NDiskPassiveHandler 類的 HandleQuery 方法中對(duì) ReqDirectory 請(qǐng)求的處理:

if (informationType == this.fileDirectoryInfoTypes.ReqDirectory)
    {
        ReqDirectoryContract contract = CompactPropertySerializer.Default.Deserialize<ReqDirectoryContract>(info, 0);
        string fullPath = this.ConstructFullPath(contract.DirectoryPath);
        SharedDirectory dir = SharedDirectory.GetSharedDirectory(fullPath);
        return CompactPropertySerializer.Default.Serialize<ResDirectoryContract>(new ResDirectoryContract(dir));
    }

(1)首先,將二進(jìn)制請(qǐng)求消息反序列化為 ReqDirectoryContract 對(duì)象,從中拿到對(duì)方想要請(qǐng)求的目錄路徑。

(2)通過 SharedDirectory 的靜態(tài)方法 GetSharedDirectory 獲取目標(biāo)目錄下的文件列表和子文件夾列表,并包裝成 SharedDirectory 對(duì)象。

(3)將 SharedDirectory 對(duì)象序列化成二進(jìn)制后,返回給請(qǐng)求方。

上面就以請(qǐng)求指定目錄下的文件列表及文件夾列表為例,說明了底層業(yè)務(wù)通信的過程。其它的業(yè)務(wù)通信就不再贅述了,大家可自行查看源碼。

2. UI 實(shí)現(xiàn)

在客戶端,最主要的UI控件就是 NDiskBrowser 的實(shí)現(xiàn),它的功能主要有:

(1)瀏覽遠(yuǎn)程磁盤下的目錄及文件。

(2)可從遠(yuǎn)程磁盤下載文件到本地電腦。

(3)可將本地文件上傳到遠(yuǎn)程磁盤。

我們?nèi)匀灰詾g覽遠(yuǎn)程磁盤指定目錄下的所有文件及文件夾為例,來看看 NDiskBrowser 是如何在UI展現(xiàn)的。

SharedDirectory sharedDirectory = this.nDiskOutter.GetSharedDirectory(this.ownerID, this.clientType, this.netDiskID , path);
 
foreach (DirectoryDetail dirDetail in sharedDirectory.SubDirectorys)
{
    ListViewItem item = new ListViewItem(new string[] { dirDetail.Name, dirDetail.CreateTime.ToString(), "" }, 0);
    item.Tag = new FileOrDirectoryTag(dirDetail.Name, 0, dirDetail.CreateTime, false);
    this.listView_fileDirectory.Items.Add(item);
}
 
foreach (FileDetail file in sharedDirectory.FileList)
{
    ListViewItem item = new ListViewItem(new string[] { file.Name, file.CreateTime.ToString(), PublicHelper.GetSizeString((uint)file.Size) }, this.GetIconIndex(file.Name));
    item.Tag = new FileOrDirectoryTag(file.Name, file.Size, file.CreateTime, true);
    item.ToolTipText = string.Format("大    ?。簕0}\n創(chuàng)建日期:{1}", PublicHelper.GetSizeString((uint)file.Size), file.CreateTime);
    this.listView_fileDirectory.Items.Add(item);
}

在通過 NDiskOutter 的 GetSharedDirectory 方法拿到 SharedDirectory 對(duì)象后,就將其 SubDirectorys 所包含的每個(gè)子文件夾作為 ListViewItem  添加到 ListView 中顯示出來;同時(shí),也將其 FileList 所包含的每個(gè)文件作為 ListViewItem  添加到 ListView 中顯示出來。這樣就出現(xiàn)了我們之前截圖的效果。

NDiskBrowser 的實(shí)現(xiàn)代碼雖然比較多,但是都很簡(jiǎn)單,大家下載源碼后可自行查看。

三. Demo運(yùn)行示例

1. 運(yùn)行Demo

(1)運(yùn)行服務(wù)端。

雙擊服務(wù)端運(yùn)行目錄下的 Oraycn.RemoteDisk.Server.exe ,即可啟動(dòng)服務(wù)端,如下截圖所示:

遠(yuǎn)程硬盤服務(wù)端

(2)運(yùn)行客戶端。

修改客戶端配置文件 Oraycn.RemoteDisk.exe.config 中的 ServerIP 為運(yùn)行服務(wù)端電腦的 IP地址,然后雙擊 Oraycn.RemoteDisk.exe 啟動(dòng)客戶端: 

遠(yuǎn)程硬盤客戶端登錄

賬號(hào)密碼隨便填,登錄成功后,進(jìn)入主界面:

遠(yuǎn)程硬盤客戶端主界面

此時(shí),在主界面的輸入框中填上對(duì)方的賬號(hào),點(diǎn)擊“訪問他的磁盤”按鈕,如果對(duì)方在線,就會(huì)彈出此文第一張截圖的窗體了。

如此,我們就可以完全的操控遠(yuǎn)程硬盤了。

以上就是C#實(shí)現(xiàn)訪問遠(yuǎn)程硬盤的圖文教程的詳細(xì)內(nèi)容,更多關(guān)于C#訪問遠(yuǎn)程硬盤的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#日期控件datetimepicker保存空值的三種方法

    C#日期控件datetimepicker保存空值的三種方法

    這篇文章主要介紹了C#日期控件datetimepicker保存空值的三種方法,本文分別講解了三種方法的實(shí)現(xiàn)原理和代碼示例,需要的朋友可以參考下
    2015-06-06
  • C#如何讀取Txt大數(shù)據(jù)并更新到數(shù)據(jù)庫(kù)詳解

    C#如何讀取Txt大數(shù)據(jù)并更新到數(shù)據(jù)庫(kù)詳解

    這篇文章主要給大家介紹了關(guān)于C#如何讀取Txt大數(shù)據(jù)并更新到數(shù)據(jù)庫(kù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 解決winform界面刷新閃爍問題的多種方案

    解決winform界面刷新閃爍問題的多種方案

    這篇文章給大家介紹了如何解決winform界面刷新閃爍問題的多種方案,文中通過代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-02-02
  • C#網(wǎng)站生成靜態(tài)頁(yè)面的實(shí)例講解

    C#網(wǎng)站生成靜態(tài)頁(yè)面的實(shí)例講解

    今天小編就為大家分享一篇關(guān)于C#網(wǎng)站生成靜態(tài)頁(yè)面的實(shí)例講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Qt讀取本地系統(tǒng)時(shí)間的幾種方式小結(jié)

    Qt讀取本地系統(tǒng)時(shí)間的幾種方式小結(jié)

    這篇文章主要介紹了Qt讀取本地系統(tǒng)時(shí)間的幾種方式小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • C#實(shí)現(xiàn)左截取和右截取字符串實(shí)例

    C#實(shí)現(xiàn)左截取和右截取字符串實(shí)例

    這篇文章主要介紹了C#實(shí)現(xiàn)左截取和右截取字符串實(shí)例,是針對(duì)字符串的常用操作,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • C#連接Oracle數(shù)據(jù)庫(kù)使用Oracle.ManagedDataAccess.dll

    C#連接Oracle數(shù)據(jù)庫(kù)使用Oracle.ManagedDataAccess.dll

    這篇文章主要介紹了C#使用Oracle.ManagedDataAccess.dll的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • C#實(shí)現(xiàn)IDbConnection/IDbCommand等相關(guān)通用數(shù)據(jù)接口

    C#實(shí)現(xiàn)IDbConnection/IDbCommand等相關(guān)通用數(shù)據(jù)接口

    ADO.NET?中的數(shù)據(jù)提供者對(duì)象提供了IDbConnection、IDbCommand、IDbDataParameter等通用數(shù)據(jù)接口,本文將利用這些對(duì)象實(shí)現(xiàn)一個(gè)通用方法以訪問和操作數(shù)據(jù)庫(kù)內(nèi)容,需要的朋友可以參考下
    2024-04-04
  • C#類型轉(zhuǎn)換之顯式和隱式轉(zhuǎn)換詳解

    C#類型轉(zhuǎn)換之顯式和隱式轉(zhuǎn)換詳解

    在C#編程中,類型轉(zhuǎn)換是一個(gè)核心概念,它允許我們?cè)诔绦蛑刑幚聿煌愋偷臄?shù)據(jù),類型轉(zhuǎn)換可以分為兩大類:顯式類型轉(zhuǎn)換和隱式類型轉(zhuǎn)換,在這篇博客中,我們將深入探討這兩種類型轉(zhuǎn)換的定義、用法和重要性,需要的朋友可以參考下
    2024-07-07
  • C#使用HtmlAgilityPack抓取糗事百科內(nèi)容實(shí)例

    C#使用HtmlAgilityPack抓取糗事百科內(nèi)容實(shí)例

    這篇文章主要介紹了C#使用HtmlAgilityPack抓取糗事百科內(nèi)容的方法,實(shí)例分析了C#中HtmlAgilityPack的相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07

最新評(píng)論

平塘县| 呼图壁县| 全椒县| 化州市| 弋阳县| 木里| 晋江市| 旺苍县| 南郑县| 肇源县| 石首市| 南充市| 苍梧县| 仁寿县| 阳山县| 揭西县| 浦江县| 延寿县| 克什克腾旗| 昭通市| 西和县| 周至县| 册亨县| 英德市| 托克托县| 微博| 西青区| 永平县| 鹿邑县| 海伦市| 宝丰县| 天镇县| 邻水| 颍上县| 马关县| 武川县| 黔西县| 漳州市| 平原县| 焉耆| 仁布县|