【问题标题】:How to set file size to 100 Bytes in Windows in C++?如何在 C++ 中的 Windows 中将文件大小设置为 100 字节?
【发布时间】:2012-05-23 07:10:58
【问题描述】:

能否请您告诉如何将文件最大大小设置为 100 字节。如果我尝试写入超过 100 字节的数据 ntwritefile() 应该会抛出错误 ERROR_NOT_ENOUGH_MEMORY

您能否建议我,一个将 100 字节(或固定大小)设置为文件的 widnows API?

在我们的产品中,ntwritefile() 失败并出现错误 ERROR_NOT_ENOUGH_MEMORY。我试图了解,在什么情况下,我们会收到该错误。

【问题讨论】:

  • 据我所知,您无法让系统限制文件的大小。
  • 为什么windows会提供这样的东西?配置文件的大小,当然,但是单个文件的大小?
  • 有什么原因你不能在你的代码中自己检查这个吗?
  • 在我们的产品中,ntwritefile() 失败并出现错误 ERROR_NOT_ENOUGH_MEMORY。我试图了解,在什么情况下,我们会收到该错误

标签: c++ windows file file-io


【解决方案1】:

使用SetFilePointer,然后使用SetEndOfFile。不要忘记在SetEndOfFile之后CloseHandle

【讨论】:

    【解决方案2】:

    在 Windows 上看起来像这样:

    1. 创建文件
    2. WriteFile

    就是这样。

    【讨论】:

    • 是的,但是如果写入超过 100 个字节(由这个进程或另一个进程),这不会“失败”。
    • 在提示符下,您也可以使用“fsutil file createnew” (microsoft.com/resources/documentation/windows/xp/all/proddocs/…) 创建一个固定大小的文件。
    • 正如 Joachim Pileborg 所说,这取决于您在代码中设置大小。
    • 只需创建一个100字节的缓冲区并相应地设置WriteFile的参数..
    • 当程序尝试写入超过字节 100 时,不会导致错误,正如问题中所问的那样。
    【解决方案3】:

    您可以创建大小为 100 字符的缓冲区,并在完成后将缓冲区写入文件。

    #include <stdio.h>
    #include <memory.h>
    
    
    int main(int argc, char* argv[])
    {
        char buffer[100];
    
        //assign values
        memset(buffer, 'A', 100);
        buffer[5]='@';
    
        FILE * pFile;
        pFile = fopen ( "buffer.100" , "wb" );
        fwrite (buffer, 1, sizeof(buffer) , pFile );
        fclose (pFile);
    
        return 0;
    }
    

    【讨论】:

    • 他不想创建一个 100 字节的文件,他想确保他不能写入超过 100 字节的文件。
    • siva 询问将文件设置为 100 字节(或固定大小),上面的代码可以做到这一点,不仅在 windows 中。
    【解决方案4】:

    您想创建一个 100 字节的文件吗?或者您是否要将文件的大小限制为 100 字节,这意味着如果文件超过 100 字节,对文件的任何进一步写入都将不起作用?

    如果它是您的第一个,那么您可以使用CreateFileWriteFile 并将缓冲区大小限制为 100 字节。

    如果它是第二个..那么我认为它不可能......

    【讨论】:

    • 感谢您的回答蛇!。我对第二个感兴趣
    • 这个文件是由您的应用程序管理的,还是您需要在全球范围内进行限制。我的意思是,即使在使用 3rd 方文本编辑器写入文件时,您是否也希望存在限制?
    【解决方案5】:

    从架构上讲,您最好的方法如下:

    1. 确定您是如何读取和写入相关文件的。
    2. 创建一个通过单个托管类提供这些相同功能的接口。 API 将尽可能与您已有的相同。
    3. 添加代码,封装在您的管理器类中,以便在您写入时跟踪缓冲区的大小,可能还会缓冲您在文件中所需的 100 个字节。然后,代码可以以您决定的任何方式检测和处理溢出情况(即,如果这是您想要的,则抛出异常。)

    【讨论】:

      【解决方案6】:

      很抱歉,您不需要为此设置缓冲区。 简单地说,如果你创建一个文件的内存映射对象,它大于 文件大小,系统会自动将文件扩展至该大小。

      但是对于 100 字节,您只需创建一个 100 字节的虚拟 char 数组和 将其写入文件。

      看, http://msdn.microsoft.com/en-us/library/windows/desktop/aa366542(v=vs.85).aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-13
        • 1970-01-01
        • 1970-01-01
        • 2018-03-21
        • 1970-01-01
        • 2016-02-20
        相关资源
        最近更新 更多