既能在windows中使用也能在Linux中使用的文件操作类库.docx
- 文档编号:3528850
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:10
- 大小:617.62KB
既能在windows中使用也能在Linux中使用的文件操作类库.docx
《既能在windows中使用也能在Linux中使用的文件操作类库.docx》由会员分享,可在线阅读,更多相关《既能在windows中使用也能在Linux中使用的文件操作类库.docx(10页珍藏版)》请在冰豆网上搜索。
既能在windows中使用也能在Linux中使用的文件操作类库
一、作业名称
编写文件操作类库
二、作业要求
要求该文件操作类库既能在windows中使用,也能在Linux中使用。
在该库中需要封装文件操作中最基本的一些文件操作,其中包括linux下面的open/lseek/read/write/close,windows下面的CreateFile/OpenFile/CloseHandle/WriteFile/
SetFilePointer.
三、设计与实现
首先定义基类MyFile,提供文件操作函数的接口。
再通过条件编译判断操作系统,确定了系统以后,从基类下派生出具体的子类并用相应的系统调用函数来实现。
四、测试
1.测试方案:
按照代码实现的功能,我们对文件的操作主要实现创建,打开,读写,关闭。
2.测试代码:
intmain()
{
//将实例化子类的方法名保存在MyFileSystem类的m_FileSystemFunction对象中,key值为MyFileTest
MyFileSystem:
:
SetInstance("MyFileTest",fun);
//生成子类的实例myFile
MyFile*myFile=MyFileSystem:
:
GetInstance("MyFileTest");
myFile->open();
//创建文件
myFile->MyCreateFile("D:
\\FileTest.txt");
//写文件
myFile->MyWriteFile("D:
\\FileTest.txt","testlinuxhomework1filesystem");
//读文件
myFile->MyReadFile("D:
\\FileTest.txt");
deletemyFile;
return0;
}
3.测试结果及截图:
几个封装的函数基本测试成功,可以正确的调用使用。
6、附录
FileTest.cpp:
#include
#include
#include
#include
usingnamespacestd;
//SYSTEM用于标识系统,1表示windows系统,0表示linux系统
#ifdefWIN32
#defineSYSTEM1
#else
#defineSYSTEM0
#endif
classMyFile;
typedefMyFile*(*FileFunction)();
/*
控制类,用于保存实例化子类的方法名、生成子类的实例
*/
classMyFileSystem
{
public:
staticvoidSetInstance(std:
:
stringname,FileFunctioninstanceFunction)
{
m_FileSystemFunctions[name]=instanceFunction;
}
staticMyFile*GetInstance(std:
:
stringname)
{
if(m_FileSystemFunctions.count(name))
{
returnm_FileSystemFunctions[name]();
}
else
{
returnNULL;
}
}
private:
staticstd:
:
map : string,FileFunction>m_FileSystemFunctions; }; std: : map : string,FileFunction>MyFileSystem: : m_FileSystemFunctions; /* 文件操作基类,提供文件操作方法的接口*/ classMyFile { public: virtualvoidopen()=0; virtualvoidMyCreateFile(char*filename)=0; virtualvoidMyWriteFile(char*filename,char*inText)=0; virtualvoidMyReadFile(char*filename)=0; }; //如果系统是windows,包含windows系统文件基本操作的头文件 #ifSYSTEM==1 #include #include #include DWORDTempBuffer[4]; charLength; classwindows_filesystem: publicMyFile { public: voidopen() { printf("windowsclass\n"); } //创建文件 voidMyCreateFile(char*filename) { HANDLEhFile; hFile=CreateFile((LPCSTR)filename,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); CloseHandle(hFile); } //写文件 voidMyWriteFile(char*filename,char*inText) { HANDLEhFile; DWORDnBytes; hFile=CreateFile((LPCSTR)filename,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,0,NULL); if(hFile! =INVALID_HANDLE_VALUE) { WriteFile(hFile,inText,strlen(inText)+1,&nBytes,NULL); CloseHandle(hFile); } } //读文件 voidMyReadFile(char*filename) { HANDLEhFile; DWORDdwBytesRead; charbuffer[4096]={0}; hFile=CreateFile((LPCSTR)filename,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); ReadFile(hFile,buffer,4096,&dwBytesRead,NULL); CloseHandle(hFile); std: : cout< : endl; } //生成该类的实例 staticMyFile*CreateInstance() { staticwindows_filesystem*windows0=newwindows_filesystem; returnwindows0; } }; #else //系统是linux,派生linux下文件操作的子类_ classlinux_filesystem: publicMyFile { public: voidopen() { printf("Linuxclass\n"); } //创建文件 voidMyCreateFile(char*filename) { MyFile*fp=fopen(filename,"w"); } //读文件 voidMyReadFile(char*filename) { printf("LinuxFilereading...\n"); MyFile*stream; charbuffer[10]; inti; stream=fopen(filename,"r"); fread(buffer,sizeof(char),5,stream); fclose(stream); for(i=0;i<5;i++) { printf("%c",buffer[i]); } printf("\n"); } //写文件 voidMyWriteFile(char*filename,char*buffer) { printf("LinuxFilewriting...\n"); MyFile*stream; inti; stream=fopen(filename,"w"); fwrite(buffer,sizeof(char),5,stream); fclose(stream); for(i=0;i<5;i++) { printf("%c",buffer[i]); } printf("\n"); } //打开文件 voidopen(constchar*filename,constchar*mode) { MyFile*fp; fp=fopen(filename,mode); if(fp==NULL) { return; } fclose(fp); } //生成该类的实例 staticMyFile*CreateInstance() { staticlinux_filesystem*linux0=newlinux_filesystem; returnlinux0; } }; #endif /* 将实例化子类的方法名保存在全局变量fun中*/ #ifSYSTEM==1 FileFunctionfun=&windows_filesystem: : CreateInstance; #else FileFunctionfun=&linux_filesystem: : CreateInstance; #endif intmain() { //将实例化子类的方法名保存在MyFileSystem类的m_FileSystemFunction对象中,key值为MyFileTest MyFileSystem: : SetInstance("MyFileTest",fun); //生成子类的实例myFile MyFile*myFile=MyFileSystem: : GetInstance("MyFileTest"); myFile->open(); myFile->MyCreateFile("D: \\FileTest.txt"); myFile->MyWriteFile("D: \\FileTest.txt","testlinuxhomework1filesystem"); myFile->MyReadFile("D: \\FileTest.txt"); deletemyFile; return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- windows 使用 Linux 文件 操作
![提示](https://static.bdocx.com/images/bang_tan.gif)