CStdioFile

来源:互联网 发布:佛山房地产数据 编辑:程序博客网 时间:2024/06/06 00:05
// 0610-5.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "0610-5.h"#ifdef _DEBUG#define new DEBUG_NEW#endif// 唯一的应用程序对象CWinApp theApp;using namespace std;int main(){    int nRetCode = 0;    HMODULE hModule = ::GetModuleHandle(nullptr);    if (hModule != nullptr)    {        // 初始化 MFC 并在失败时显示错误        if (!AfxWinInit(hModule, nullptr, ::GetCommandLine(), 0))        {            // TODO: 更改错误代码以符合您的需要            wprintf(L"错误: MFC 初始化失败\n");            nRetCode = 1;        }        else        {            TCHAR *pszFileName = _T("H:\\test.txt");            // CStdioFile默认是以文本方式打开文件的,所以写入文件是要换行只需要写入\n            // 流式文件是被缓冲的,而且可以以文本方式(缺省)或二进制方式打开。            // 文本方式提供对硬回车—换行符对的特殊处理。当你将一个换行符(0x0A)            // 写入一个文本方式的CStdioFile 对象时,字节对(0x0D,0x0A)被发送给该文件。            // 当你读一个文件时,字节对(0x0D,0x0A)被翻译为一个字节(0x0A)。            // 读取一行文本到缓冲区,遇到“0x0D,0x0A”时停止读取,并且去掉硬回车“0x0D”,            // 保留换行符“0x0A”,在字符串末尾添加“\0”(0x00)。nMax个字符里包含0x00这个字符。分析如下:            // 1)如果nMax <= 字符数,读取(nMax-1)个字符 + 0x00            // 2)如果nMax = 字符数 + 1,读取nMax个字符 + 0x00            // 3)如果nMax    > 字符数,读取nMax个字符 + 0x0A + 0x00            // CFile类默认的是按照二进制模式操作文件。            // 二进制模式:对于一行的结尾我们必须输入”\r\n”,才能表示回车换行的效果。            // CFile::typeText              以文本文件的形式打开文件            // CFile::typeBinary            以二进制文件的形式打开文件            // CFile::shareDenyNone         允许其他进程对文件进行读写            // CFile::shareDenyRead         不允许其他进程对文件进行读操作            // CFile::shareDenyWrite        不允许其他进程对文件进行写操作            // CFile::shareExclusive        以独占模式打开文件,不允许其他进程对文件进行读写            // CStdioFile 不支持Duplicate,LockRange,和UnlockRange 这几个CFile 函数。            // 如果在CStdioFile 中调用了这几个函数,将会出现CNoSupported 异常。            CStdioFile file;            CFileException ex;            // 判断文件是否存在,如果存在则去掉只读属性            if (PathFileExists(pszFileName) && !PathIsDirectory(pszFileName))            {                DWORD dwAttrs = GetFileAttributes(pszFileName);                if (dwAttrs != INVALID_FILE_ATTRIBUTES && (dwAttrs & FILE_ATTRIBUTE_READONLY))                {                    dwAttrs &= ~FILE_ATTRIBUTE_READONLY;                    SetFileAttributes(pszFileName, dwAttrs);                }            }            if (!file.Open(pszFileName,                 CFile::modeCreate | CFile::typeText | CFile::modeReadWrite | CFile::modeNoTruncate | CFile::shareDenyWrite,                &ex))                TRACE(_T("Can't open file %s, error = %u\n"), pszFileName, ex.m_cause);            else            {                file.SeekToEnd();                CString str = _T("asdf\n");                file.WriteString(str);                file.WriteString(_T("test\n"));                TCHAR sz[] = _T("asdf\n");                file.WriteString(sz);                file.Close();            }        }    }    else    {        // TODO: 更改错误代码以符合您的需要        wprintf(L"错误: GetModuleHandle 失败\n");        nRetCode = 1;    }    return nRetCode;}
原创粉丝点击