簡體   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