⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ftpstm.h

📁 很好用的ftp源码
💻 H
字号:
/*****************************************************************************
 *	ftpstm.h
 *****************************************************************************/

#ifndef _FTPSTREAM_H
#define _FTPSTREAM_H

typedef HRESULT (*STMIO)(HINTERNET hinst, BOOL fAssertOnFailure, LPVOID pvBuffer, DWORD dwNumberOfBytesToWrite, LPDWORD pdwNumberOfBytesWritten);

/*****************************************************************************
 *
 *	CFtpStm
 *
 *
 *****************************************************************************/

class CFtpStm           : public IStream
{
public:
    //////////////////////////////////////////////////////
    // Public Interfaces
    //////////////////////////////////////////////////////
    
    // *** IUnknown ***
    virtual STDMETHODIMP_(ULONG) AddRef(void);
    virtual STDMETHODIMP_(ULONG) Release(void);
    virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj);
    
    // *** IStream ***
    virtual STDMETHODIMP Read(void *pv, ULONG cb, ULONG *pcbRead);
    virtual STDMETHODIMP Write(const void *pv, ULONG cb, ULONG *pcbWritten);
    virtual STDMETHODIMP Seek(LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition) { return(E_NOTIMPL); };
    virtual STDMETHODIMP SetSize(ULARGE_INTEGER libNewSize) { return(E_NOTIMPL); };
    virtual STDMETHODIMP CopyTo(IStream *pstm, ULARGE_INTEGER cb, ULARGE_INTEGER *pcbRead, ULARGE_INTEGER *pcbWritten);
    virtual STDMETHODIMP Commit(DWORD grfCommitFlags);
    virtual STDMETHODIMP Revert(void) { return(E_NOTIMPL); };
    virtual STDMETHODIMP LockRegion(ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType);
    virtual STDMETHODIMP UnlockRegion(ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType);
    virtual STDMETHODIMP Stat(STATSTG *pstatstg, DWORD grfStatFlag);
    virtual STDMETHODIMP Clone(IStream **ppstm) { return(E_NOTIMPL); };


public:
    CFtpStm();
    ~CFtpStm(void);

    // Public Member Functions
    HRESULT ReadOrWrite(LPVOID pv, ULONG cb, ULONG * pcb, DWORD dwAccess, STMIO io, HRESULT hresFail);


    // Friend Functions
    friend HRESULT CFtpStm_Create(CFtpDir * pfd, LPCITEMIDLIST pidl, DWORD dwAccess, IStream ** ppstream, ULARGE_INTEGER uliComplete, ULARGE_INTEGER uliTotal, IProgressDialog * ppd, BOOL fClosePrgDlg);

protected:
    // Private Member Variables
    int                     m_cRef;

    HINTERNET               m_hint;             //
    DWORD                   m_dwAccessType;     //
    CFtpDir *               m_pfd;              //
    HINTERNET               m_hintSession;      //
    LPITEMIDLIST            m_pidl;             //
    IProgressDialog *       m_ppd;              //
    ULARGE_INTEGER          m_uliComplete;      //
    ULARGE_INTEGER          m_uliTotal;         //
    BOOL                    m_fClosePrgDlg;     // Do we want to close the progress dialog after we finish copying this stream?
    ULONG                   m_ulBytesSinceProgressUpdate;     // When was the last time I displayed progress?
    LPITEMIDLIST            m_pidlOriginalFtpPath;    // We need to return the current directory for this handle to this location when we are done.
};

#endif // _FTPSTREAM_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -