CStdioFile

// 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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值