1

在我描述我的问题之前,这里是我正在编写的 C++ 程序的描述:

  • 我的程序的目的是在 RAM 内存上创建文件。

我读到,如果FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_DELETE_ON_CLOSE在创建文件时指定,它将直接加载到 RAM 内存中。

谈论的博客之一是这个:

这只是暂时的

拉里·奥斯特曼,2004 年 4 月 19 日

要创建一个“临时”文件,您调用 CreateFileFILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_DELETE_ON_CLOSEdwFlagsAndAttributes属性中指定。这种位组合作为对文件系统的提示,文件数据不应该被刷新到磁盘。换句话说,无需系统接触磁盘即可创建、写入和读取这样的文件。

我已经建立了一个小程序,但它没有达到目标。相反,它会在我指定的目录中的硬盘驱动器上创建一个文件。

这是我的程序:

void main ()
{
   LPCWSTR str = L"c:\\temp.txt";
   HANDLE fh = CreateFile(str,GENERIC_WRITE,0,NULL,CREATE_ALWAYS, FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_DELETE_ON_CLOSE,NULL);   

   if (fh == INVALID_HANDLE_VALUE)
   {
      printf ("Could not open TWO.TXT");
      return;
   }

   DWORD dwBytesWritten; 
   for (long i=0; i<20000000; i++)
   {
      WriteFile(fh, "This is a test\r\n", 16, &dwBytesWritten, NULL);
   }

   return;
}

我认为CreateFile函数存在问题,但我无法修复它。请帮我。

4

1 回答 1

2

拉里奥斯特曼还提到:

如果超出可用内存,内存管理器会将文件数据刷新到磁盘。这会导致性能下降,但您的操作将成功而不是失败。

因此,操作系统会创建文件,以防由于内存限制而需要刷新数据。

于 2010-05-16T07:01:52.090 回答