既能在windows中使用也能在Linux中使用的文件操作类库.docx

上传人:b****5 文档编号:3528850 上传时间:2022-11-23 格式:DOCX 页数:10 大小:617.62KB
下载 相关 举报
既能在windows中使用也能在Linux中使用的文件操作类库.docx_第1页
第1页 / 共10页
既能在windows中使用也能在Linux中使用的文件操作类库.docx_第2页
第2页 / 共10页
既能在windows中使用也能在Linux中使用的文件操作类库.docx_第3页
第3页 / 共10页
既能在windows中使用也能在Linux中使用的文件操作类库.docx_第4页
第4页 / 共10页
既能在windows中使用也能在Linux中使用的文件操作类库.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

既能在windows中使用也能在Linux中使用的文件操作类库.docx

《既能在windows中使用也能在Linux中使用的文件操作类库.docx》由会员分享,可在线阅读,更多相关《既能在windows中使用也能在Linux中使用的文件操作类库.docx(10页珍藏版)》请在冰豆网上搜索。

既能在windows中使用也能在Linux中使用的文件操作类库.docx

既能在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;

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 日语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1