Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用File.Move-C时出现FTP问题#_C#_Ftp - Fatal编程技术网

C# 使用File.Move-C时出现FTP问题#

C# 使用File.Move-C时出现FTP问题#,c#,ftp,C#,Ftp,我遇到FTP watcher服务和File.Move方法的问题 FTP服务器是一个简单的IIS 8.5 FTP站点,FTP客户端是FileZilla FTP客户端 windows服务将轮询要删除文件的目录 第一个任务是使用static file.Move方法重命名文件。 第二种方法是使用static file.copy方法将文件复制到另一个目录 问题是,在传输文件时,如果使用file.Copy,它将[正确]抛出IO异常,并显示消息“该文件正被另一个进程使用” 但是,当文件仍在传输时,File.M

我遇到FTP watcher服务和File.Move方法的问题

FTP服务器是一个简单的IIS 8.5 FTP站点,FTP客户端是FileZilla FTP客户端

windows服务将轮询要删除文件的目录

第一个任务是使用static file.Move方法重命名文件。 第二种方法是使用static file.copy方法将文件复制到另一个目录

问题是,在传输文件时,如果使用file.Copy,它将[正确]抛出IO异常,并显示消息“该文件正被另一个进程使用”

但是,当文件仍在传输时,File.Move将在不引发任何异常的情况下执行其任务。这是该方法的正确行为吗?我找不到任何关于为什么会发生这种情况的信息。我的印象是,如果文件.Move用于另一个进程(FTP传输)正在使用的文件,但它似乎没有,则会引发异常


是否有人经历过这种情况和/或对文件的行为有过解释。Move方法

此代码显示了该文件。如果您尝试移动文件时文件正在使用,Move确实会引发异常,因此我认为您的前提是不正确的

var filePath = @"d:\public\temp\temp.txt";
var moveToPath = @"d:\public\temp\temp2.txt";

// Create a stream reader so the file is 'in use'
using (var fileStream = new StreamReader(filePath))
{
    // This will fail with an IO exception
    File.Move(filePath, moveToPath);
}
例外情况:

进程无法访问该文件,因为其他进程正在使用该文件


移动文件实际上只需重命名,只需要对目标和源目录具有写权限。对于真实副本,您需要对文件本身具有读取权限。由于源文件上存在独占锁定,因此复制将失败,但移动将成功。

复制文件需要打开它以进行读取访问。FTP服务器当前已打开该文件,因此您无法打开该文件进行读取

移动文件不需要打开它进行读取访问,除非文件位于与目标不同的卷上


由于将文件移动到同一卷只需要删除访问权限,而不需要读取访问权限,因此FTP服务器必须锁定文件进行读写操作,而不是删除操作。

按照我阅读问题的方式,问题发生的是服务器,而不是客户端,因此FileZilla不受影响。