// 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;
}
CStdioFile
最新推荐文章于 2024-06-23 17:38:03 发布