none
C++转成C# RRS feed

  • 问题

  • CFile f;
    f.Open("c:\\Anyone Of Us.mp3",CFile::modeRead);
    ULONG l = (ULONG)f.GetLength();
    BYTE * dd = (BYTE*)malloc(l);
    f.Read(dd,l);
    f.Close();
    2012年11月19日 8:36

全部回复

  • HDEV hDev = NULL;
    int ret;
    HANDLE hFile = NULL;
    char* szDevName[10];
    cb->GetWindowText(szDevName,10);
    CFile f;
    f.Open("c:\\Anyone Of Us.mp3",CFile::modeRead);
    ULONG l = (ULONG)f.GetLength();
    BYTE * dd = (BYTE*)malloc(l);
    f.Read(dd,l);
    f.Close();
    //打开设备
    ret = sd_OpenDevice(szDevName,&hDev);
    if(ret != SDR_OK)
    ErrorHandle...
    //创建文件
    ret = sd_CreateFile(hDev,"Anyone Of Us.mp3",l,0,NULL,&hFile);
    if(ret != SDR_OK)
    ErrorHandle...
    ULONG i=0;
    ULONG ul = BUFFER_LEN;
    for (i=0;i<l/BUFFER_LEN && ret == SDR_OK;i++)
    {
    //写入数据,一次最多BUFFER_LEN
    ret = sd_Write(hFile,dd+i*BUFFER_LEN,BUFFER_LEN);
    }
    if(ret != SDR_OK)
    ErrorHandle...
    ul = l%BUFFER_LEN;
    if(ul)
    {
    //写入数据,最后一块
    ret = sd_Write(hFile,dd+i*BUFFER_LEN,ul);
    if(ret != SDR_OK)
    ErrorHandle...
    }
    free(dd);
    //关闭打开的文件
    sd_CloseFile(hFile);
    //关闭打开的设备
    sd_CloseDevice(hDev);

    转换以上代码......

    sd.h

    #ifndef __SD_DATA_DLL_H__
    #define __SD_DATA_DLL_H__
    
    #ifdef  __cplusplus
    extern "C" {
    #endif
    
    #ifdef _WIN32
    #define WIN32_LEAN_AND_MEAN
    #include <windows.h>
    	typedef HANDLE			HDEV;	
    #else
    	typedef int				HDEV;
    	typedef void*			HANDLE;
    	typedef unsigned long	ULONG;
    	typedef unsigned char	UCHAR;
    #endif
    
    //-----------------return value--------------------//
    #define SDR_OK					0
    #define SDR_NOT_FORMAT			0x01	/* 数据区没有格式化 */
    #define SDR_READ_ERROR			0x02	/* 读数据错误 */
    #define SDR_WRITE_ERROR			0x03	/* 写数据错误 */
    #define SDR_PARAM_ERROR			0x04	/* 参数错误 */
    #define SDR_MAX_FILE			0x05	/* 文件数超过了最大值 */
    #define SDR_NOT_AUTH			0x06	/* 文件没有授权 */
    #define SDR_RESPONSE_ERROR		0x07	/* 获取到的数据错误 */
    #define SDR_NOT_SUPPORT			0x08	/* 暂不支持 */
    #define SDR_TOO_MANY_DATA		0x09	/* 操作的数据太多 */
    #define SDR_MEMORY_ERROR		0x0A	/* 内存错误 */
    #define SDR_NOT_ENOUGH_SPACE	0x0B	/* 空间不够 */
    #define SDR_FILE_NOT_FOUND		0x0C	/* 没有找到文件 */
    #define SDR_FILE_EXIST			0x0D	/* 文件已经存在 */
    #define SDR_FILE_ACCESS			0x0E	/* 文件操作没有权限 */
    #define SDR_NO_DEVICE			0x0F	/* 没有找到设备 */
    #define SDR_NO_MORE_FILES		0x10	/* 枚举文件时没有文件了 */
    
    #define DATA_LENGTH				496		/* 有用数据长度 */
    #define MAX_OP_SECTORS			128		/* 一次最多可操作的扇区数 */
    #define BUFFER_LEN				(DATA_LENGTH*MAX_OP_SECTORS)  /* 一次最多读写数据长度 */
    
    /* 功能:枚举所有可用设备 
    * 参数:szDevNames
    *			枚举到的所有设备名称,名称之间用NULL分割,最后以2个NULL结束;例如"J\0N\0\0"
    *			使用sd_Free释放szDevNames
    * 返回:成功返回SDR_OK, 否则其他
    */
    int sd_EnumDevice(char** szDevNames);
    
    /* 功能:释放内存资源
     * 参数:pMem
     *			要释放的内存指针
     * 返回:无
     */
    void sd_Free(void *pMem);
    
    /* 功能:打开指定设备 
    * 参数:szDevName
    *			以NULL结尾的设备名称;例如"j\0"
    *		 phDevice
    *			返回的设备句柄,用sd_CloseDevice关闭
    * 返回:成功返回SDR_OK, 否则其他
    */
    int sd_OpenDevice(const char* szDevName, HDEV* phDevice);
    
    /* 功能:关闭设备 
    * 参数:hDevice
    *			设备句柄,由sd_OpenDevice获取
    * 返回:成功返回SDR_OK, 否则其他
    */
    void sd_CloseDevice(HDEV hDevice);
    
    
    /* 功能:创建新文件,用于写入数据
    * 参数:hDevice
    *			设备句柄,由sd_OpenDevice获取
    *		 szName
    *			文件名称,以NULL结尾的字符串,长度不超过230个字节
    *		 ulFileLen
    *			文件长度
    *		 ulFlags
    *			必须是0
    *		 pKey			
    *			必须是NULL
    *		 phFile
    *			文件句柄
    * 返回:成功返回SDR_OK, 否则其他
    */
    int sd_CreateFile(HDEV hDevice, const char* szName, ULONG ulFileLen, ULONG ulFlags, 
    				  const UCHAR* pKey, HANDLE* phFile);
    
    /* 功能:关闭文件 
    * 参数:hFile
    *			文件句柄,由sd_CreateFile获取
    * 返回:成功返回SDR_OK, 否则其他
    */
    void sd_CloseFile(HANDLE hFile);
    
    /* 功能:写入数据
    * 参数:hFile
    *			文件句柄,由sd_CreateFile获取
    *		 puData
    *			要写入的数据
    *		 ulLen
    *			数据长度,单次读写数据长度不超过 BUFFER_LEN
    * 返回:成功返回SDR_OK, 否则其他
    */
    int sd_Write(HANDLE hFile, const UCHAR* puData, ULONG ulLen);
    
    
    #ifdef  __cplusplus
    }
    #endif
    
    #endif //__SD_DATA_DLL_H__

    2012年11月20日 2:37
  • dear

    这看起来是读/写挡,您可参考以下范例

    http://msdn.microsoft.com/zh-cn/library/system.io.file(VS.80).aspx


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/

    2012年11月20日 4:02
  • 你好,

    你在本论坛发了相同的帖子,为保证良好的论坛环境,我会将其合并为一个帖子。希望不要重复发相同内容的帖。

    谢谢你的理解与支持。


    Lisa Zhu [MSFT]
    MSDN Community Support | Feedback to us

    2012年11月21日 6:08
    版主