将本地的一个文件目录复制/移动到局域网上的其他机器上的方法

我的程序有一个需要,就是要把一个文件目录(包括其中的文件和子目录)拷贝/移动到一个局域网上的其他服务器上,使用.NET自带的类对于我的要求来说,略显复杂,我想如果使用命令行操作的话,应该很简单,几个Dos命令就能解决,因此我也想在我的程序中直接使用这些Dos命令达到目的。
具体想法是使用net use命令映射一个网络驱动器到本地,然后利用xcopy等命令像操作本地磁盘一样在本地和网络驱动器之间操作文件和目录,操作完成之后,再删掉这个网络驱动器。
这里用到了Process对象,大家想必对这个对象应该很熟悉了。

我在使用过程中主要遇到以下几个问题(为了简便,我就把Windows的命令提示符窗口,简称为Dos窗口吧,这样习惯些):
1、如何向Dos窗口发送命令:
方法是设置ProcessStartInfo对象的RedirectStandardInput为true,这同时要求设置UseShellExecute为false
2、在程序执行过程中,Dos窗口一闪而过:
显然,我们不想让这个Dos窗口被看到,方法是设置ProcessStartInfo对象的CreateNoWindow为true
3、执行的Dos命令没有效果,比如net use并没有建立起网络驱动器
试验发现,必须设置ProcessStartInfo对象的RedirectStandardOutput为true。这有点不明白,为何不重定向输出就不行呢?
4、删除网络驱动器的Dos命令看起来不起作用
我是在类的Dispose方法中删除网络驱动器,这样如果没有手工调用Dispose方法,那么在终结器中也会被调用,但是似乎在终结器调用中删除命令并没有被执行。奇怪的是,如果我在执行删除的位置设置断点的话,删除操作就能成功。后来恍然大悟,难道是因为线程/进程同步问题?因为这个删除操作是在终结器中被调用,可能执行Dos命令的进程还没有真正执行,或者还依赖于当前线程/进程的时候,就随着当前线程/进程被销毁了。具体Process类在Start之时与创建者的关系我还不清楚。突然想到,可能是和UseShellExecute=false有关?解决方法就是调用Process对象的WaitForExit方法,让当前线程等到Process退出之后再继续执行。


转载于:https://www.cnblogs.com/Ricky81317/archive/2007/12/14/994699.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要通过无线局域网复制文件,可以使用Python的`socket`模块来建立网络连接并传输文件。 首先,需要确保源文件所在的计算机和目标计算机都连接在同一个无线局域网中。 然后,分别在源计算机和目标计算机上编写Python脚本。 在源计算机上,使用`socket`模块创建一个TCP服务器,监听指定的端口号。然后,使用`open()`函数打开源文件,并使用`read()`方法逐块读取文件内容,使用`send()`方法通过建立的连接将文件内容发送给目标计算机。最后,关闭连接和文件。 在目标计算机上,使用`socket`模块创建一个TCP客户端,连接到源计算机的IP地址和端口号。然后,使用`open()`函数创建一个目标文件,并使用`recv()`方法接收源文件的内容,并使用`write()`方法将内容写入目标文件。最后,关闭连接和文件。 脚本示例: 源计算机脚本: ```python import socket HOST = '源计算机的IP地址' PORT = 8000 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((HOST, PORT)) s.listen(1) conn, addr = s.accept() with open('源文件路径', 'rb') as f: while True: data = f.read(1024) if not data: break conn.send(data) conn.close() ``` 目标计算机脚本: ```python import socket HOST = '源计算机的IP地址' PORT = 8000 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((HOST, PORT)) with open('目标文件路径', 'wb') as f: while True: data = s.recv(1024) if not data: break f.write(data) s.close() ``` 在运行源计算机脚本之后,再运行目标计算机脚本,即可在目标计算机上复制文件。 需要注意的是,根据实际情况修改代码中的IP地址、端口号、源文件路径和目标文件路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值