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