需求是这样的(使用的是windows系统): 
  
    有一个底座,可以连接50个优盘,然后这个底座再跟电脑连接,我想把同样的数据拷贝到这 
    50个优盘里(期间不可以拔出部分优盘,一定要是50个的) 
    
      第一种情况: 
              当连接的优盘没有超过26个的时候,电脑上可以显示优盘的盘符的。可以进行数据的传送,一个一个的,更新26个优盘。 
  
      第二种情况: 
              当连接的优盘超过26个的时候,比如我插入了50个优盘,则电脑上只是显示26个盘符(只到字母Z)而已。其他的24个优盘的盘符则没有显示出来。这样的话,没有盘符,我就没有办法把数据拷贝到其他的24个优盘上,就只能拷贝到有显示盘符的26个优盘上。这样的话,就达不到目标了。             我之前做了测试,当我插入50个优盘的时候,其他的24个优盘,windows系统并没有为其分配盘符,只是分配了一个空的东东。             后来我又有一个想法,先把数据传到26个优盘上,然后使用程序代码将这26个盘符卸载掉,然后再更新其他的24个优盘,好像是不行。 
     
      总之是因为盘符不够,导致无法把数据传到其他的24个优盘里。想请教一下,这个问题该如何解决?请问哪个高手知道哪些文章介绍这方面的或者是网站介绍这方面的。
请提供一下思路或者想法。好可以上网查资料。

解决方案 »

  1.   

    程序代码可不可以设置U盘的盘符? 因为在 windows 的管理中, 可以设置某个盘的盘符, 我不知道用程序如何设置, 如果用程序可以设置的话, 你可以试试自己来设置所有的 U盘的盘符
      

  2.   

    windows支持将磁盘挂载到NTFS分区的文件夹。假设你的C:盘是NTFS格式,你可以在C:盘根目录下建一个文件夹,然后在这个文件夹下建50个文件夹,将50个U盘分别挂到这50个文件夹下。
      

  3.   

    记以前老师讲的z盘之后是ab,ac,ad,,哈哈,,,我没有硬件,,只是这么想,,不过硬盘,,,是这么分的,,,不知道U盘是怎么分的
      

  4.   

    试试File.listRoots()方法,应该可以返回所有盘的根路径。
    然后,再根据具体情况想办法解决。或者用3楼的方法,把所有的优盘分区都挂载到一个文件夹下面(如果可以的话),然后,向其子文件夹拷贝文件即可。
      

  5.   

    u能不能做冗余阵列俺不知道,把所有的u并联了,当一个u用
      

  6.   

    这个windows是和linux学的。linux要用U盘必须要挂载,而挂载时可以自定义名字。也就是说,加入你挂载的名称为/mnt/uuu ,那么uuu目录就是你U盘里的内容。
    另外因为windows是即插即用的,所以我还不会挂载,以后学习一下……
      

  7.   

    目前的进展是这样的:
       按照3楼的说法,我把D盘设置为NTFS的。
       然后手动为50个优盘设置挂载的目录。例如我把优盘G挂载在D盘的youpan目录上。
       这样的话,我把文件拷贝到youpan目录上,就相当于拷贝到优盘G上。
       即使再多的优盘也没有问题。
       但是有一个问题,就是设置挂载目录时,我是手动设置的,而不是代码实现的。
     
       如何手动设置,我是参考下面的文章的:
       http://support.microsoft.com/kb/307889/zh-cn#top
      目前的进展是这样的:
        接下来要做的是代码实现上面的挂载功能。
    继续加油中。
      

  8.   

    楼主胡说八道,windows盘符从A-Z,最多26个,怎么可能同时插50个U盘。
      

  9.   

    问题基本解决了。就是运用挂载的思想。
    例如可以使用软件把某个盘的文件系统NIFS的。
    看了整天的mldn,终于有了收获。所有的关于挂载点的代码都是
    使用c++写的。c#是没有的,不过可以使用c#来调用C++写的代码。
    部分代码如下: 1、设置挂载点
      [DllImport("kernel32.dll")]
     public static extern int SetVolumeMountPoint(string lpszVolumeMountPoint,string lpszVolumeName);      接下来是调用:
         private void button2_Click(object sender, EventArgs e)
            {
                StringBuilder sb = new StringBuilder(1024);
                 int i = GetVolumeNameForVolumeMountPoint(@"G:\", sb, sb.Capacity);
                 Console.WriteLine(i.ToString());
                 int result = SetVolumeMountPoint(@"d:\de\", sb.ToString());
                 Console.WriteLine(result.ToString());           
            }
      成功后就可以使用de来访问G盘了。设置完挂载点之后可以使用下面的代码来查看
      总共有哪些挂载点的。如下:
         private void button3_Click(object sender, EventArgs e)
            {
                StringBuilder sb = new StringBuilder(1024); 
                IntPtr result = FindFirstVolumeMountPoint(@"d:\\", sb, sb.Capacity);
                Console.WriteLine(sb.ToString());
                while (FindNextVolumeMountPoint(result, sb, sb.Capacity))
                {
                    Console.WriteLine(sb.ToString());
                }
                //最后把result这个搜索句柄给关闭掉
                FindVolumeMountPointClose(result);
               
            }至于其他的可以参看这个地址:
      http://msdn.microsoft.com/en-us/library/aa365735(VS.85).aspx  这个需求还是有些难的,由于老板说这个比较急,让我研究一下。
      我觉得这也是一种锻炼,想看英文文档,查找资料。而且webservices是使用java写的,c#只是调用。
      而访问磁盘管理的则是c++的,O(∩_∩)O哈哈~,我一下子要看三个ide工具进行调试。
      继续加油中。