[英]How to check if file exists in remote folder via FTP?
我想檢查遠程文件夾的內容,並確定該文件夾中是否存在特定文件(我僅按文件名進行檢查,所以chill:D)
示例:我想檢查/testftp
文件夾中/testftp
包含textfile.txt
文件。
我這樣做是為了獲取文件夾內容:
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("myftpaddress");
request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
request.Credentials = new NetworkCredential("uid", "pass");
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
Console.WriteLine(reader.ReadToEnd());
Console.WriteLine("Directory List Complete, status {0}", response.StatusDescription);
reader.Close();
response.Close();
它寫在控制台中:
-rw-r--r-- 1 6668 userftp 91137 jul 16 23:20 file1.txt
-rw-r--r-- 1 468 userftp 137 jul 16 18:40 file2.swf
並將完整的流響應寫入控制台,如何僅獲取文件名? 有更容易的方法嗎?
嘗試下載文件會更容易。 如果獲取到StatusCode指示該文件不存在,則說明該文件不存在。
可能比過濾ListDirectoryDetails
的結果要ListDirectoryDetails
。
更新
為了澄清,您需要做的是:
FtpWebResponse response = (FtpWebResponse) request.GetResponse();
bool fileExists = (response.StatusCode != BAD_COMMAND);
我認為BAD_COMMAND是FtpStatusCode .CantOpenData,但我不確定。 這很容易測試。
string listing = reader.ReadToEnd();
// find all occurrences of the fileName and make sure
// it is bounded by white space or string boundary.
int startIndex = 0;
bool exists = false;
while (true)
{
int index = listing.IndexOf(fileName, startIndex);
if (index == -1) break;
int leadingIndex = index - 1;
int trailingIndex = index + fileName.Length;
if ((leadingIndex == -1 || Char.IsWhiteSpace(listing[leadingIndex]) &&
(trailingIndex == list.Length || Char.IsWhiteSpace(listing[trailingIndex]))
{
exists = true;
break;
}
startIndex = trailingIndex;
}
正則表達式版本:
string pattern = string.Format("(^|\\s){0}(\\s|$)", Regex.Escape(fileName));
Regex regex = new Regex(pattern);
string listing = reader.ReadToEnd();
bool exists = regex.IsMatch(listing);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.