【问题标题】:calling CreateFile, specifying FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_DELETE_ON_CLOSE调用 CreateFile,指定 FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_DELETE_ON_CLOSE
【发布时间】:2019-07-08 22:26:24
【问题描述】:

在描述我的问题之前,先描述一下我正在编写的 C++ 程序:

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

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

谈论的博客之一是这个:

It’s only temporary ????

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

要创建“临时”文件,请调用 CreateFile,并在 dwFlagsAndAttributes 属性中指定 FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_DELETE_ON_CLOSE。这种位组合作为对文件系统的提示,文件数据不应该被刷新到磁盘。换句话说,无需系统接触磁盘即可创建、写入和读取此类文件。

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

这是我的程序:

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 函数存在问题,但我无法修复它。请帮帮我。

【问题讨论】:

    标签: ram createfile


    【解决方案1】:

    拉里·奥斯特曼还提到:

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

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

    【讨论】:

    • 我认为不是这样。我有超过 2GB 的可用 RAM。我尝试创建的文件只有几百 MB。
    • 我说“以防万一”。您的程序确实在我的系统上创建了该文件,所以我相信这是预期的行为。
    猜你喜欢
    • 2011-07-11
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    相关资源
    最近更新 更多