在服务里访问映射盘

m_halfman 2011-11-18 01:56:55
之前发过一贴
http://topic.csdn.net/u/20111115/13/cb822f42-b965-4a97-b025-919f6abe4005.html
不知道为什么在公司的机器上打不开,再加上又有了新情况,于是再发一贴,能解决问题者请也回那贴都给分。

代码如下:
string cmd=@"use x: \\192.168.0.111\sharedir passss /user:userer";
System.Diagnostics.Process.Start("net",@cmd);

System.IO.FileInfo fileInfo = new System.IO.FileInfo(@"d:\vssver.scc");
System.IO.File.Copy(@"d:\vssver.scc",@"x:\"+fileInfo.Name);

报那个什么“找不到路径的一部分”的错。
于是我把后面两句代码改成了
cmd = @"copy d:\vssver.scc x:\";
Process.Start("cmd",@cmd);
这回不报错了,但是文件也没拷过去。
再改成
cmd = @"d:\vssver.scc x:\";
Process.Start("copy",@cmd);
还是不报错,还是没拷过去。
最后改成了
cmd = @"d:\vssver.scc x:\";
Process.Start("xcopy",@cmd);
好吧用外部命令终于成功了,Process.Start不支持内部命令吗?最奇怪的是System.IO总是找不到路径,不然就不用这么麻烦了。

但是更麻烦的来了,另外一本程序是要从映射盘把文件移动到本地
最开始还是用System.IO
DirectoryInfo filemovedir = new DirectoryInfo(@"X:\");
FileInfo[] FileList = filemovedir.GetFiles();
foreach(FileInfo file in FileList)
{
File.Move(file.FullName , @"C:\ser\" + file.Name);
}

当然和上面一样,“找不到路径的一部分”,而且调外部命令的方法也不好使了,没有移动的外部命令吧??
我想来想去,只有写个bat,里面就是一句move,然后用Process.Start调这个bat。
但这还不是最麻烦的,这本程序还要求判断哪个文件移动失败了,要把失败的文件名输出在log里。我晕,Process.Start不可能返得回来文件名啊!!彻底没招了……

想来想去,只有用System.IO是最好的,但是,各位大虾,怎样能让System.IO找到路径呢?
...全文
242 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
m_halfman 2011-11-18
  • 打赏
  • 举报
回复
目录当然是存在的,否则我用调只有一句move的bat的方法也不会成功。
再说前面也说了,一样的环境一样的程序,
cmd = @"d:\vssver.scc x:\";
Process.Start("xcopy",@cmd);就可以

System.IO.File.Copy(@"d:\vssver.scc",@"x:\"+fileInfo.Name);就不行。
chenhs 2011-11-18
  • 打赏
  • 举报
回复
看了你的帖子,看来问题是你没有确认目标路径是否存在,
File.Move(file.FullName , @"C:\ser\" + file.Name);
你确认C:\ser\ 这个路径已经存在了么?如果没有,File.Move 肯定会报错的,你应该先用
Directory.Exsit(@"C:\ser\") 确认 目标路径是否存在,不存在要先创建路径 Directory.Create(@"C:\ser\")

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧