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;
}
/// <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(); } }