繁体   English   中英

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

[英]FTP issue when using File.Move - C#

我在使用FTP Watcher服务和File.Move方法时遇到问题。

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

Windows服务将轮询要放置文件的目录。

第一个任务是使用静态File.Move方法重命名文件。 第二个方法是使用静态File.Copy方法将文件复制到另一个目录。

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

但是File.Move将在文件仍在传输的同时执行它的任务而不会引发任何异常。 这是此方法的正确行为吗? 我无法找到有关发生这种情况的任何信息。 我的印象是,如果File.Move用于另一个进程正在使用的文件[FTP传输],它将抛出异常,但事实并非如此。

有没有人经历过和/或对File.Move方法的行为有解释

此代码表明,如果在尝试移动文件时正在使用File.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服务器必须锁定文件以进行读取和写入,但不能删除。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM