public void ReadFile(string filepath)
        {
            FileInfo info = new FileInfo(filepath);

}
我通过openfiledialog和DragDrop方法读取filepath,给fileinfo初始化
 foreach (string r in FileDialog.SafeFileNames)
            {
                ReadFile(r);
            }  System.Array pathlist = e.Data.GetData(DataFormats.FileDrop) as System.Array;
                foreach (string r in pathlist)
                {
                    FileInfo inf = new FileInfo(r);
                    ReadFile(inf.Name);
                }
都是一个string,代表该文件名字,为什么SafeFileNames传入的值就可以准确的读出该文件位置。而拖拽读取的文件名就不行呢,难道说clr在safefilenames被调用时做了什么处理吗?求解!

解决方案 »

  1.   

    你把拖拽得到的pathlist里面的字符串print出来看看不就知道了
      

  2.   

    pathlist里只是文件路径的string,问题不在这,在于
    拖拽获得的文件名,赋给fileinfo的构造函数,因为无法定位会报异常
    而同样是string型的文件名,从控件 FileDialog的 FileDialog.SafeFileNames方式获得的string型的文件名,赋给fileinfo构造函数,就能获得文件路径。
    我就奇怪了,只凭一个string的文件名,怎么会让fileinfo获得这个文件的路径呢。
      

  3.   

    第一:你确定两种方式传给fileinfo的filepath一模一样,请认真核对!
    第二:你的拖拽功能,原地方的文件是用的“复制”方式而 不是“剪贴”方式吧;在初始化fileinfo时,如果原文件被删,就会报错吧。
      

  4.   


    1,绝对一样,我一个char一个char的对了。暂不谈两个string是否一样,我好奇的是只知道文件名,FileInfo是如何知道完整路径的。
    2,拖拽功能是winform的dragdrop事件,是复制文件路径,不是文件本身。