日韩欧美人妻无码精品白浆,www.大香蕉久久网,狠狠的日狠狠的操,日本好好热在线观看

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#實(shí)現(xiàn)遠(yuǎn)程磁盤:像訪問自己的電腦硬盤一樣訪問對方的電腦硬盤 (附Demo源碼)

freeflydom
2025年5月16日 8:41 本文熱度 534

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

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

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

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

         

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

        

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

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

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

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

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

/// <summary>
/// 獲取目標(biāo)用戶電腦上指定目錄下的文件列表信息。
/// </summary>
/// <param name="ownerID">目標(biāo)用戶的賬號(磁盤分享者)</param>
/// <param name="clientType">目標(biāo)用戶的設(shè)備類型</param>
/// <param name="netDiskID">網(wǎng)盤的標(biāo)志。(對于遠(yuǎn)程磁盤而言,即OwnerID為某個用戶的ID時,該參數(shù)可傳null)。如果是群組共享的文件夾,則可以將其設(shè)置為對應(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)用,以獲取對方電腦指定目錄下的文件列表。

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

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

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

     我們來看看 NDiskPassiveHandler 類的 HandleQuery 方法中對 ReqDirectory 請求的處理:

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)制請求消息反序列化為 ReqDirectoryContract 對象,從中拿到對方想要請求的目錄路徑。

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

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

      上面就以請求指定目錄下的文件列表及文件夾列表為例,說明了底層業(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 對象后,就將其 SubDirectorys 所包含的每個子文件夾作為 ListViewItem  添加到 ListView 中顯示出來;同時,也將其 FileList 所包含的每個文件作為 ListViewItem  添加到 ListView 中顯示出來。這樣就出現(xiàn)了我們之前截圖的效果。

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

三. Demo下載及運(yùn)行

1. Demo 源碼下載:Oraycn.RemoteDisk.rar

2. 運(yùn)行Demo

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

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

       

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

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

         

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

         

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

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

轉(zhuǎn)自https://www.cnblogs.com/justnow/p/18877201


該文章在 2025/5/16 8:41:38 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財務(wù)費(fèi)用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

色色女女久久综合网| 欧日韩激情| www精品少妇一区二区三区| 欧美精品1区3区| 欧美激情3P视频| 爱婷婷五月丁香| 厨房后入大屁股美女| 婷婷五月天中文一区二区| 国产91三级在线| 女女同性AV一区二区三| 不卡的AV成人在线| 老鸭窝av电影| 2久久久久久久久2019| 国产iv日韩| 91美女h在线看| 2024亚洲精品在线观看| 久久久精品入口| 超碰 porn.com| 蜜乳一区二区三四区在线视频播放| 麻豆传媒欧美一区| 亚洲国产一区二区三区东区| 做爰视频久久高清观看| 人人澡澡综合久久| 大香蕉在线a视频| 国产约操色| 日本美女髙潮| 日韩女同久久精品A片麻豆| 欧美色影院一区二区不卡| 国产美女午夜福利一区二区| 中国不卡黄片观看| 色色蜜桃综合网| 国产欧美日韩精品成人动态| 日韩夫妻一级黄片| 美腿在线一区二区| 亚洲精品乱码在线观看了| 91大神熟女| 日本久久精品尺码无人区 | 熟女国产久久久三区四区| 国产一级欧美| 色色色色精品| 日韩一区二区鸡巴|