1

リモートフォルダの内容を確認し、特定のファイルがこのフォルダに存在するかどうかを確認したい(ファイル名のみで確認しているので、チル:D)

例:フォルダ内にファイル/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

そしてそれはコンソールにフルストリーム応答を書き込みます、ファイル名だけを取得する方法は?もっと簡単な方法はありますか?

4

2 に答える 2

1

ファイルを試してダウンロードする方が簡単です。ファイルが存在しないことを示すStatusCodeを取得した場合は、ファイルが存在しないことがわかります。

の結果をフィルタリングするよりもおそらく作業が少なくなりますListDirectoryDetails

アップデート

明確にするために、あなたがする必要があるのはこれだけです:

FtpWebResponse response = (FtpWebResponse) request.GetResponse();
bool fileExists = (response.StatusCode != BAD_COMMAND);

BAD_COMMAND はFtpStatusCode .CantOpenData になると思いますが、よくわかりません。それは簡単にテストできます。

于 2012-07-16T22:32:58.723 に答える
0
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);
于 2012-07-16T22:38:23.667 に答える