文件内容是一行行写的,现找到一合适的行,要删除它,怎么操作?不是重写文件吧?
解决方案 »
- 菜鸟求助,急!!!!!VC TeeChart AddArray
- 初级问题:服务器端Accept()成功后(即有客户端Connect成功),服务器使用哪个端口收发数据?是随机的吗?
- 为什么从CListView继承出来的类,编译没有通过,急,可在加分
- 一个很简单的问题:如何异步复制文件,显示进度,并且能够中途取消复制。最好能有代码
- 不爽,怎么在dll中导出类?
- ActiveX流媒体播放器
- 一个很简单的问题,帮忙送分
- 《Essential C++》 的源码下载 怎么http://www.objectwrite.com/这个网站进不去啊?
- 各位高手请帮忙!!
- SOCKET的OnSend()
- 有关atl做COM组件接口中使用枚举类型enum的问题
- 请问如何实现在背景图片上进行图片的透明贴图?具体内详
不过用FILEMAPPING应该会快一点。
GENERIC_WRITE | GENERIC_READ,
FILE_SHARE_READ,
NULL,
CREATE_ALWAYS,
FILE_FLAG_SEQUENTIAL_SCAN,
NULL); // 创建文件映射内核对象,句柄保存于hFileMapping
HANDLE hFileMapping = CreateFileMapping(hFile,NULL,PAGE_READWRITE,
0, 0x4000000, NULL);
// 释放文件内核对象
CloseHandle(hFile);
// 设定大小、偏移量等参数
__int64 qwFileSize = 0x4000000;
__int64 qwFileOffset = 0;
__int64 T = 600 * sinf.dwAllocationGranularity;
DWORD dwBytesInBlock = 1000 * sinf.dwAllocationGranularity;
// 将文件数据映射到进程的地址空间
PBYTE pbFile = (PBYTE)MapViewOfFile(hFileMapping,
FILE_MAP_ALL_ACCESS,
(DWORD)(qwFileOffset>>32), (DWORD)(qwFileOffset&0xFFFFFFFF), dwBytesInBlock);
memcpy( lpAddress, lpBuf, ....);//进行文件写入,要防止内存溢出的情况
// 从进程的地址空间撤消文件数据映像
UnmapViewOfFile(pbFile);
// 关闭文件映射对象
CloseHandle(hFileMapping);
我今天是是按重新写入的方法写的,出现如下问题:
CStringArray strarray;
if( !file.Open(m_strPathIndex, CFile::modeRead) )
{
return;
}
CString strLine;
while(file.ReadString(strLine))
{
strarray.Add(strLine);
}
file.Close();
CString str;
int nCount=strarray.GetSize();
strarray.RemoveAt(0);//我每次都是要删除第一条记录,这是肯定的,这句出错
if( !file.Open(m_strPathIndex, CFile::modeCreate|CFile::modeWrite) )
{
return;
}
for(i=0; i<strarray.GetSize(); i++)
{
str = "";
str = strarray[i] + "\n";
file.WriteString(str);
}
file.Close();只要删除操作出现,就会造成程序自动退出。以上是在循环中做的,因为要处理一批文件
名是数字的文件,都是要删除第一行。怎么会这样呢?
file.SeekToBegin();
file.ReadString(temp);
file.WriteString("");
file.Close();
用空串代替,这样怎么没有效果呢?????而且这样的话下次我就要读第一个不是空串的并把它改成空串,再下次是它的下一个.....
CStdioFile file("e:\\indexD1.txt",CFile::modeCreate|CFile::modeReadWrite|CFile::modeNoTruncate);
file.SeekToBegin();
file.ReadString(temp);
file.WriteString("dfg");
file.Close();
MessageBox(temp);
怎么这样的执行后文件的第一行不变啊?
dfg1\2005_03_1614_38_13
如果写入空串的话就没有任何效果,如果解决呢,谢谢各位哦
file.SeekToBegin();
file.ReadString(temp);
file.WriteString("");
file.Flush();//Forces any data remaining in the file buffer to be written to the file
file.Close();
file.ReadString(temp);
file.Seek(-temp.GetLength()-2,CFile::current );
file.WriteString("");
file.Flush();
file.Close();
temp.Remove('\r\n');
MessageBox(temp);
还是不行,没有变化
CStringArray strarray;
CStdioFile file;
CString m_strPathIndex = "c:\\111.txt";
if( !file.Open(m_strPathIndex, CFile::modeRead) )
{
return;
}
CString strLine;
while(file.ReadString(strLine))
{
strarray.Add(strLine);
}
file.Close();
CString str;
int nCount=strarray.GetSize();
DeleteFile(m_strPathIndex);
if( !file.Open(m_strPathIndex, CFile::modeCreate|CFile::modeWrite) )
{
return;
}
for(int i=1; i<strarray.GetSize(); i++)
{
str = strarray[i] ;
file.WriteString(str);
file.WriteString("\n");
}
file.Close();