11
votes

Obtenir la taille du fichier sur un FTP en C #

Je veux obtenir la taille d'un fichier sur un FTP.

                reqTime = (FtpWebRequest)FtpWebRequest.Create(new Uri(FtpPath + filePath));
                reqTime.Credentials = new NetworkCredential(Username, Password);
                reqTime.Method = WebRequestMethods.Ftp.GetDateTimestamp;
                reqTime.UseBinary = true;
                FtpWebResponse respTime = (FtpWebResponse)reqTime.GetResponse();
                DateTime LastModified = respTime.LastModified;
                respTime.Close();


0 commentaires

3 Réponses :


28
votes

essayer reqsize.method = webrequestmethods.ftp.getfilesize; code> Au lieu de GetDateTimeStamp

Ceci a fonctionné pour moi: P>

FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://servername/filepath"));
request.Proxy = null;
request.Credentials = new NetworkCredential("user", "password");
request.Method = WebRequestMethods.Ftp.GetFileSize;

FtpWebResponse response = (FtpWebResponse)request.GetResponse();
long size = response.ContentLength;
response.Close();


8 commentaires

Meilleur commentaire que précédent: il doit lire les données de la réponse, non seulement obtenez la longueur de contenu , je crois. De toute façon, il semble étrange que la longueur de contenu serait 0.


C'était une erreur de copie pâte - j'ai mis à jour ma question avec beaucoup plus de détails.


Je peux obtenir la taille du fichier sans télécharger le fichier correctement? Je ne veux tout simplement pas télécharger ce fichier, car son énorme, si sa même taille localement.


Je pense que c'est peut-être parce que la taille n'est pas implémentée sur le serveur FTP, en fonction de certaines googles. Je vais vérifier.


@Andrew Barber - Je ne pense pas qu'il veuille lire des données de la réponse, il veut juste la longueur de contenu (qui est la longueur du fichier)


@IDWMASTER: Je sais, mais ce comportement me semble étrange. Si vous demandez la taille du fichier, il ne faut pas que les données soient renvoyées?


Non, il semble fonctionner (au moins sur mon ordinateur) sans lire les données de la réponse.


Les 2e et 3ème GetResponse () doivent être omis. Si je fais trois appels à GetResponse (), toutes les réponses sont égales (comparées à == dans la fenêtre immédiate). Le résultat est dans la LoginResponse.ContentLength.



0
votes

// moyen le plus simple et efficace d'obtenir la taille du fichier FTP.

var taille = getftpfLileSize (nouveau Uri ("FTPURL"), Nouveau NetworkCredential ("Nom d'utilisateur", "Mot de passe")); P>

public static long GetFtpFileSize(Uri requestUri, NetworkCredential networkCredential)
{
    //Create ftpWebRequest object with given options to get the File Size. 
    var ftpWebRequest = GetFtpWebRequest(requestUri, networkCredential, WebRequestMethods.Ftp.GetFileSize);

    try { return ((FtpWebResponse)ftpWebRequest.GetResponse()).ContentLength; } //Incase of success it'll return the File Size.
    catch (Exception) { return default(long); } //Incase of fail it'll return default value to check it later.
}
public static FtpWebRequest GetFtpWebRequest(Uri requestUri, NetworkCredential networkCredential, string method = null)
{
    var ftpWebRequest = (FtpWebRequest)WebRequest.Create(requestUri); //Create FtpWebRequest with given Request Uri.
    ftpWebRequest.Credentials = networkCredential; //Set the Credentials of current FtpWebRequest.

    if (!string.IsNullOrEmpty(method))
        ftpWebRequest.Method = method; //Set the Method of FtpWebRequest incase it has a value.
    return ftpWebRequest; //Return the configured FtpWebRequest.
}


0 commentaires

1
votes

J'ai essayé d'obtenir une taille de fichier en le téléchargeant. Les deux, données de réponses ne fonctionnent pas pour moi, alors j'ai fait cela, en utilisant la propriété StatutDescription de FTPWebResponse avec la méthode du téléchargement du téléchargement:

int openingBracket = response.StatusDescription.IndexOf("(");
int closingBracket = response.StatusDescription.IndexOf(")");                     
var temporarySubstring = response.StatusDescription.Substring(openingBracket+1, closingBracket - openingBracket);
var fileSize = temporarySubstring.Substring(0, temporarySubstring.IndexOf(" "));


0 commentaires