UEFI编程--文件写操作

整体代码

EFI_STATUS EFIAPI UefiMain(IN EFI_HANDLE ImageHandle,IN EFI_SYSTEM_TABLE *SystemTable)
{
	EFI_STATUS Status;
    //EFI_SIMPLE_FILE_SYSTEM_PROTOCOL(简称 FileSystemIo)可以用来操作FAT文件系统  
	EFI_SIMPLE_FILE_SYSTEM_PROTOCOL   *SimpleFileSystem;
	
    //LocateProtocol()函数找到第一个支持Protocol的设备句柄,并在参数interface中返回一个指向protocol interface的指针
	Status = gBS->LocateProtocol(&gEfiSimpleFileSystemProtocolGuid,NULL,(void **)&SimpleFileSystem);
	if (EFI_ERROR(Status))
	{
  		return Status;
	}
    //创建EFI_FILE_PROTOCOL实例指针 Root用来获取根目录句柄
    EFI_FILE_PROTOCOL *Root;
	Status = SimpleFileSystem->OpenVolume(SimpleFileSystem,&Root);
    //在得到该分区文件系统上的根目录EFI_FILE_PROTOCOL实例的指针后,就可以操作该分区上的文件
    UINTN BufSize;
	CHAR16 * Textbuf = (CHAR16 *)L"This is Test file";
	EFI_FILE_PROTOCOL *FileHandle = 0;
    //打开文件进行读写模式若有则打开进行写操作,无则创建
    Status = Root->Open(Root,&FileHandle,(CHAR16* )L"test.txt",EFI_FILE_MODE_CREATE |         EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE,0);

	if(FileHandle && !EFI_ERROR(Status))
	{
        BufSize = StrLen(Textbuf) *2;
		Print(L"BufSize = %d \n",BufSize);
		Status = FileHandle->Write(FileHandle,&BufSize,Textbuf);
		Status = FileHandle->Close(FileHandle);
	}

    //开始读操作
    EFI_FILE_PROTOCOL *SystemFile = 0;
	CHAR16 Buf[64];
	BufSize = 64;
	//打开根目录下的test.txt
	Status = Root->Open(Root,&SystemFile,(CHAR16* )L"test.txt",EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE,0);
	//读文件最多64字节
	if(SystemFile && !EFI_ERROR(Status))
	{
		Status = SystemFile->Read(SystemFile,&BufSize,Buf);
		Status = SystemFile->Close(SystemFile);
		if(!EFI_ERROR(Status))
		{
			Buf[BufSize] = 0;
			Print(L"%s\n",Buf);
		}
	}
	return Status;
}

 函数原型

EFI_STATUS
(EFIAPI *EFI_FILE_OPEN)(
  IN EFI_FILE_PROTOCOL        *This, //目录句柄
  OUT EFI_FILE_PROTOCOL       **NewHandle,//返回打开文件的句柄
  IN CHAR16                   *FileName, //文件名
  IN UINT64                   OpenMode,  //读写创建模块
  IN UINT64                   Attributes //文件属性仅在产生文件时有效
  );

文件打开模式 

文件属性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值