小问题:在sdk中,怎么一行一行的读写文件? CreateFile是打开文件句炳,然后怎么处理呀? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CStdioFile File;if(File.Open(....)){ CString csLine; while(File.ReadString(csLine)) { //Do something with csLine } File.Close();} 对不起,没看清题目不过,你可以参考CStdioFile::ReadString()函数源码。 我主要是不明白CreateFile WriteFile这一套api的机制,而且我用的是runtime库,怎么引用mfc的CStdioFile 类呢? char cName[100]="\\……";//路径DWORD len,dwread;HANDLE hf = CreateFile(cName,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);len = GetFileSize (hf, NULL);char* c=new char[len];ReadFile(hf,bEn,len, &dwread, NULL);//读//WriteFile(hf,c,len, &dwread, NULL);//写CloseHandle(hf);delete[]c; CreateFile,然后ReadFile,WriteFileReadFile,WriteFile将文件看作二进制的字节流,不存在行的概念。如果要一行一行的读,就是读直到遇到一个换行符。写,只要把换行符也写进去就行了。 看错题了:char t[2];char cName[100]="\\……";//路径DWORD len,dwread,dwseek=0;……HANDLE hf = CreateFile(cName,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);len = GetFileSize (hf, NULL);char* c=new char[len];c[0]='\0';SetFilePointer(hf,dwseek,NULL,FILE_BEGIN);for(DWORD i=0;i<len;i++){ ReadFile(hf,c,2, &dwread, NULL); if(t[0]=='\r'&&t[1]=='\n') break; lstrcat(c,t);}dwseek=SetFilePointer(hf,0,NULL,FILE_CURRENT);//记下当前读写位置;CloseHandle(hf);delete[]c; char* ReadLineFromFile( FILE* pFile ){ if( pFile == NULL ) return NULL; int nPositionStay = ftell( pFile ); char cCurChar = fgetc( pFile ); for( ; feof( pFile ) == 0 && cCurChar != '\n' ; ) { cCurChar = fgetc( pFile ); } fseek( pFile , -2 ,SEEK_CUR ); int nPositionMove = ftell( pFile ); char* pRtnStr = (char*)malloc( nPositionMove -nPositionStay + sizeof( '\0' ) ); if( pRtnStr == NULL ) return NULL; // back to start point fseek( pFile , nPositionStay , SEEK_SET ); int nRead = fread( (void*)pRtnStr , sizeof(char) , nPositionMove -nPositionStay , pFile ); if( nRead != nPositionMove - nPositionStay ) { free( pRtnStr ); return NULL; } pRtnStr[nPositionMove - nPositionStay] = '\0'; cCurChar = fgetc( pFile ); for( ; feof( pFile ) == 0 && cCurChar == '\n' ; ) { cCurChar = fgetc( pFile ); } fseek( pFile , -1 ,SEEK_CUR ); return pRtnStr;} 对话框 100分求教显卡性能测试程序 怎么使用CPropertySheet和CPropertyPage 做向导这样的界面? 对此警告不知咋办?请朋友赐教! 无边框窗体,用鼠标改变大小,在VC下如何实现,delphi下很简单就实现了? 有关线程钩子的问题? 问一个菜鸟问题! Release版本下编译的错误!求教? 初学者的一个调试信息问题。 CreateProcess在系统服务的本地系统账户下返回C0000142 扩展动态连接库中包含对话框资源时有问题(在线等待....) VC+ADO读取数据库的效率问题
if(File.Open(....))
{
CString csLine;
while(File.ReadString(csLine))
{
//Do something with csLine
}
File.Close();
}
DWORD len,dwread;
HANDLE hf = CreateFile(cName,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);
len = GetFileSize (hf, NULL);
char* c=new char[len];
ReadFile(hf,bEn,len, &dwread, NULL);//读
//WriteFile(hf,c,len, &dwread, NULL);//写
CloseHandle(hf);
delete[]c;
写,只要把换行符也写进去就行了。
char cName[100]="\\……";//路径
DWORD len,dwread,dwseek=0;……HANDLE hf = CreateFile(cName,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);
len = GetFileSize (hf, NULL);
char* c=new char[len];c[0]='\0';
SetFilePointer(hf,dwseek,NULL,FILE_BEGIN);
for(DWORD i=0;i<len;i++){
ReadFile(hf,c,2, &dwread, NULL);
if(t[0]=='\r'&&t[1]=='\n')
break;
lstrcat(c,t);
}
dwseek=SetFilePointer(hf,0,NULL,FILE_CURRENT);//记下当前读写位置;CloseHandle(hf);
delete[]c;
{
if( pFile == NULL )
return NULL; int nPositionStay = ftell( pFile );
char cCurChar = fgetc( pFile );
for( ; feof( pFile ) == 0 && cCurChar != '\n' ; )
{
cCurChar = fgetc( pFile );
}
fseek( pFile , -2 ,SEEK_CUR ); int nPositionMove = ftell( pFile );
char* pRtnStr = (char*)malloc( nPositionMove -nPositionStay + sizeof( '\0' ) );
if( pRtnStr == NULL )
return NULL; // back to start point
fseek( pFile , nPositionStay , SEEK_SET ); int nRead = fread( (void*)pRtnStr , sizeof(char) , nPositionMove -nPositionStay , pFile );
if( nRead != nPositionMove - nPositionStay )
{
free( pRtnStr );
return NULL;
} pRtnStr[nPositionMove - nPositionStay] = '\0'; cCurChar = fgetc( pFile );
for( ; feof( pFile ) == 0 && cCurChar == '\n' ; )
{
cCurChar = fgetc( pFile );
}
fseek( pFile , -1 ,SEEK_CUR );
return pRtnStr;
}