SharpCifs.Smb.SmbFile.Length C# (CSharp) Method

Length() public method

Returns the length of this SmbFile in bytes.
Returns the length of this SmbFile in bytes. If this object is a TYPE_SHARE the total capacity of the disk shared in bytes is returned. If this object is a directory or a type other than TYPE_SHARE, 0L is returned.
SmbException
public Length ( ) : long
return long
        public virtual long Length()
        {
            if (_sizeExpiration > Runtime.CurrentTimeMillis())
            {
                return _size;
            }
            if (GetType() == TypeShare)
            {
                Trans2QueryFsInformationResponse response;
                int level = Trans2QueryFsInformationResponse.SMB_INFO_ALLOCATION;
                response = new Trans2QueryFsInformationResponse(level);
                Send(new Trans2QueryFsInformation(level), response);
                _size = response.Info.GetCapacity();
            }
            else
            {
                if (GetUncPath0().Length > 1 && Type != TypeNamedPipe)
                {
                    IInfo info = QueryPath(GetUncPath0(), Trans2QueryPathInformationResponse.SMB_QUERY_FILE_STANDARD_INFO
                        );
                    _size = info.GetSize();
                }
                else
                {
                    _size = 0L;
                }
            }
            _sizeExpiration = Runtime.CurrentTimeMillis() + AttrExpirationPeriod;
            return _size;
        }

Usage Example

		/// <exception cref="SharpCifs.Smb.SmbException"></exception>
		/// <exception cref="System.UriFormatException"></exception>
		/// <exception cref="UnknownHostException"></exception>
		internal SmbFileOutputStream(SmbFile file, bool append, int openFlags)
		{
			this._file = file;
			this._append = append;
			this._openFlags = openFlags;
			_access = ((int)(((uint)openFlags) >> 16)) & 0xFFFF;
			if (append)
			{
				try
				{
					_fp = file.Length();
				}
				catch (SmbAuthException sae)
				{
					throw;
				}
				catch (SmbException)
				{
					_fp = 0L;
				}
			}
			if (file is SmbNamedPipe && file.Unc.StartsWith("\\pipe\\"))
			{
				file.Unc = Runtime.Substring(file.Unc, 5);
				file.Send(new TransWaitNamedPipe("\\pipe" + file.Unc), new TransWaitNamedPipeResponse
					());
			}
			file.Open(openFlags, _access | SmbConstants.FileWriteData, SmbFile.AttrNormal, 
				0);
			this._openFlags &= ~(SmbFile.OCreat | SmbFile.OTrunc);
			_writeSize = file.Tree.Session.transport.SndBufSize - 70;
			_useNtSmbs = file.Tree.Session.transport.HasCapability(SmbConstants.CapNtSmbs
				);
			if (_useNtSmbs)
			{
				_reqx = new SmbComWriteAndX();
				_rspx = new SmbComWriteAndXResponse();
			}
			else
			{
				_req = new SmbComWrite();
				_rsp = new SmbComWriteResponse();
			}
		}