解决方案 »
- VC快速移动位图
- 1000分:关于用IInternetProtocol实现过滤
- bho控制IE的几个问题
- 如何能取得到用 InstallShield 安装时用户设定的安装目录?
- CRecordSet 中的movenext()函数为什么和数据库表中的记录顺序不一致,请指教,不胜感激
- 简单问题,一个类如何使用另一个类的私有成员变量
- 如果局域网里设置了代理器,有的代理上网需要登录的,有的设置不要的,怎么得到需要不需要登录呢?
- socket.receivebuf()"10057"错误,高手请指点!!!!
- 怎样获得主对话框、主FormView的指针?
- 关于sock 编程的一些错误,求大神指正
- 彩色滤波插值算法中Ron Kimmel的加权系数算法的源代码
- 基于对话框程序打印预览出错
LPTSTR lpsz,
UINT nMax
);
virtual BOOL ReadString(
CString& rString
);
//.h File
class CTextFile : public CStdioFile
{
int m_iLineCount;
CStringArray m_arrLines;
int m_iErrCode;
CString m_strErrString;
int m_nOpenFlags;
public:
int GetErrCode();
CString GetErrString();
BOOL WriteLine(CString line);
CTextFile(LPCTSTR lpszFileName, UINT nOpenFlags );
virtual ~CTextFile();int GetLineCount();
CString ReadLine(int lineIndex) const;
CString ReadField(int lineIndex, int fieldIndex, CString splitChar) const;
CString operator []( int nIndex ) const;
};/////////////////////////////////////////////////////////////////
// CPP File
//////////////////////////////////////////////////////////////////////CTextFile::CTextFile(LPCTSTR lpszFileName, UINT nOpenFlags )
: CStdioFile(lpszFileName, nOpenFlags)
{
m_iLineCount = 0;
m_nOpenFlags = nOpenFlags;
m_iErrCode = 0;
m_strErrString = _T( " ");
while(true)
{
if ( ((m_nOpenFlags & CFile::modeRead) == CFile::modeRead)
&& (m_nOpenFlags != CFile::modeWrite) )
{
int fileLen = GetLength();
if (fileLen == 0)
break;
char *line = new char[fileLen+1];
memset(line, 0x00, sizeof(line));
if (!ReadString(line, fileLen)) // feof
{
delete line;
break;
}
CString str(line);
str = str.Mid(0, str.GetLength()-1);
str.TrimRight();
if (str != " ")
{
m_iLineCount ++;
m_arrLines.Add(str);
}
delete line;
}
else
break;
}
}CTextFile::~CTextFile()
{
Flush();
if (m_arrLines.GetSize() > 0)
m_arrLines.RemoveAll();
//if (this-> m_hFile)
// this-> Close();
}int CTextFile::GetLineCount()
{
return m_iLineCount;
}// line index start from 0
CString CTextFile::ReadLine(int lineIndex) const
{
if (lineIndex > = m_arrLines.GetSize())
return " ";
else
return m_arrLines[lineIndex];
}// lineIndex & fieldIndex start from 0
CString CTextFile::ReadField(int lineIndex, int fieldIndex, CString splitChar) const
{
CString strLine = ReadLine(lineIndex);
CSuperString spStrLine(strLine);
int num;
CString * strArr = spStrLine.Split(splitChar, num);
if (fieldIndex > num)
return " ";
else
return strArr[fieldIndex];
}CString CTextFile::operator []( int lineIndex ) const
{
return ReadLine(lineIndex);
}BOOL CTextFile::WriteLine(CString line)
{
int err = 0;
if (!m_pStream)
return FALSE;
if ( (m_nOpenFlags & CFile::modeWrite) != CFile::modeWrite )
{
m_iErrCode = ACCESS_DENIED;
m_strErrString = "Access denied! ";
return FALSE;
}
SeekToEnd();
try
{
WriteString(line + "\r\n ");
}
catch(CFileException e)
{
err = 1;
}
if (err)
return FALSE;
return TRUE;
}CString CTextFile::GetErrString()
{
return m_strErrString;
}int CTextFile::GetErrCode()
{
return m_iErrCode;
}
写文件时不应该写这个1A。
这是dos下输入文件的办法如:
C:\type con: xxx.txt
abcd
efg
Ctrl Z // 这样xxx.txt有:abcd和efg但没有ctrl Z 1Ah