要求如下:
1、允许用户在客户机资源管理器中选择一个文件夹(包含多个子文件及文件),将此文件夹托拽到Winform中,同时在服务器端指定位置自动生成一个文件夹(包含多个子文件夹及文件,文件夹层次关系与托拽过来的一致);
2、允许用户选择一个服务器端的文件夹(包含多个子文件及文件),下载到客户机,下载的文件夹及文件层次关系与服务器一致;
3、上传下载由于涉及到多个文件夹和文件,所以对稳定性和效率要求比较高。请各位大侠出出主意,有什么好的点子或实现方法,不胜感激!

解决方案 »

  1.   

    你不是都说了吗?就按你说的去一步步做就行了。接收拖放的窗体需要设置AllowDrop为true;重写DragDrop,DragEnter,DragOver等几个方法。用socket(TCP)作为数据传输。看看QQ(TM)的网络硬盘吧,跟你的需求一模一样。
      

  2.   

    ref:
    http://www.codeproject.com/csharp/Explorer_Drag_Drop.asp
      

  3.   

    1.拖放:
    拖:
    DoDragDrop(new DataObject(DataFormats.FileDrop, files), DragDropEffects.Copy | DragDropEffects.Move /* | DragDropEffects.Link */);
    放:
    string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
    foreach (string file in files)
    {
    string dest = homeFolder + "\\" + Path.GetFileName(file);
    bool isFolder = Directory.Exists(file);
    bool isFile = File.Exists(file);这只是部分主要代码,如果需要源可以和我联系
    [email protected]
      

  4.   

    题目取得不好,让人以为是问 DragDrop 的操作。我看 DragDrop 是小菜一碟,关键是通过 Internet 可靠地影射服务器端的资源的方法。
      

  5.   

    同样,存取权限应该模拟.net本地文件系统的权限控制接口。仅仅是模仿接口,模仿接口就是学习人家面向事实在在的领域需求时的设计考虑。当然可以改变。例如如果你觉得FileStream继承起来有些复杂,完全可以让OpenRead、OpenWrite等方法返回自己的一个基于WebService的新的类型。
      

  6.   

    存取权限应该模拟.net本地文件系统的权限控制接口,
    如何模拟,能说的具体些吗?
    在服务器上的共享文件夹需要授予Everyone写入的权限吗?
      

  7.   

    你首先不要确定权限的问题。而你目前需要确定client与server这两者如何通讯,是用已有文件网络传输协议,还是自己去用socket写。等你这方面确定了,再谈交互的细节。
      

  8.   

    其实你的程序在界面中只是显示一个映射关系而已,而这种映射表的保存,很简单,你用xml或者数据库,甚至可以动态与服务器进行交互获得都是可以的。你想做网络硬盘,最主要的是如何实现c/s通讯,或者采取什么样的方式通讯,这是首要的。
      

  9.   

    to:Knight94(愚翁)
       我现在的设计思路是,在服务器端配置一个Webservice,在客户端调用Webservice中的方法向服务器端写入文件夹和文件,但具体细节不是很清楚,请不吝赐教。
      

  10.   

    我现在的设计思路是,在服务器端配置一个Webservice,在客户端调用Webservice中的方法向服务器端写入文件夹和文件,但具体细节不是很清楚
    ——————————————————————————————————————————
    这种设计方法过于技术化而目标不明确。WebService或者Remoting或者直接通过Socket等,都是“选择”问题。系统分析、设计比这个高级很多。简单描述个别设计规格:你的要在客户端创建一个程序集,其中包括类型如 myFileInfo、myDirectoryInfo,设计它们的.cctor,例如针对 myFileInfo
       public bool Exists{get{};}
       public void Create(){};
       public void Delete(){};
       public myFileInfo(System.Uri){}
       public myDirectoryInfo(System.Uri){}
    以及一些基本方法,例如:
       public myFileStream Read(){};  //以网络断点序传方式下载数据
       public void Write(myFileStream f){};  //以网络断点序传方式上传数据
       public myFileSecurity GetAccessControl{};  //查询文件权限,例如针对好友、一般联系人组以及个人
       public mydirectoryInfo directory{get{};};
    针对myDirectory
       public bool Exists{get{};}
       public void Create(){};
       public void Delete(){};
       public myFileInfo[] GetFiles(){};
    还可以补充一些。关键是你切实有设计文档,考虑成熟才能去写代码。设计的关键阶段,问别人是不好使的,关键是你自己把设计规格文档写出来。
      

  11.   

    至于服务器端比较简单。逻辑设计最初是与具体计算机技术无关的,拿 myFileStream举例:在逻辑设计文档中需要对myFileStream进行描述,说明它寻找服务器uri、测试连通性、与服务器建立一个固定大小的文件读写缓冲区、通过缓冲区(空闲还是阻塞状态)读写数据、如何断点序传等行为,描述高层次的逻辑结构和流程。之后,例如你你打算首先通过WebService来实现myFileStream,那么在详细设计文档中就对服务器端WebService的接口进行描述,例如提供两个方法用来读写服务器端文件中的某个块(分块而不是读写整个文档是比较明智的),然后让myFileStream能够利用这些WebService;而如果你打算通过Socket,那么你可以对服务器端监听和解析的信令进行描述,然后让myFileStream利用这些信令来完成其流程细节。你也可以让多种myFileStream的子类基于不同的通讯方法来实现myFileStream的逻辑。
      

  12.   

    纠正一下,上述 public myFileInfo(System.Uri){} 是 myFileInfo 的 .ctor,
    public myDirectoryInfo(System.Uri){} 是 myDirectoryInfo 的 .ctor 。
      

  13.   

    to:sp1234(正面回答问题,尽量不堆砌似是而非的链接) 
       您好,我所要做的网络硬盘使用范围仅限于局域网用户,实际上通过DirectoryInfo和FileInfo即可实现,只不过需要共享服务器某文件夹的写入权限给Everyone,很不安全,如果能够对
    用户的操作权限作比较严格的控制,我的目的即可实现。
       不好意思,我把您与Knight94(愚翁)的回答搞混了,表示歉意,再次感谢!