写入临时文件



我在C 中具有以下程序:

#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
#include <string.h>
#include <Windows.h>
using namespace std;
string integer_conversion(int num) //Method to convert an integer to a string
{
    ostringstream stream;
    stream << num;
    return stream.str();
}
void main()
{
    string path = "C:/Log_Files/";
    string file_name = "Temp_File_";
    string extension = ".txt";
    string full_path;
    string converted_integer;
    LPCWSTR converted_path;
    printf("----Creating Temporary Files----nn");
    printf("In this program, we are going to create five temporary files and store some text in themnn");
    for(int i = 1; i < 6; i++)
    {
        converted_integer = integer_conversion(i); //Converting the index to a string
        full_path = path + file_name + converted_integer + extension; //Concatenating the contents of four variables to create a temporary filename
        wstring temporary_string = wstring(full_path.begin(), full_path.end()); //Converting the contents of the variable 'full_path' from string to wstring
        converted_path = temporary_string.c_str(); //Converting the contents of the variable 'temporary_string' from wstring to LPCWSTR
        cout << "Creating file named: " << (file_name + converted_integer + extension) << "n";
        CreateFile(converted_path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_TEMPORARY, NULL); //Creating a temporary file
        printf("File created successfully!nn");
        ofstream out(converted_path);
        if(!out)
        {
            printf("The file cannot be opened!nn");
        }
        else
        {
            out << "This is a temporary text file!"; //Writing to the file using file streams
            out.close();
        }
    }
    printf("Press enter to exit the program");
    getchar();
}

创建了临时文件。但是,该程序有两个主要问题:

1)一旦应用程序终止,临时文件就不会丢弃。2)文件流未打开文件,也没有编写任何文本。

如何解决这些问题?谢谢:)

当您向Windows提供FILE_ATTRIBUTE_TEMPORARY时,基本上是建议 - 它告诉系统您 em>打算将其用作临时文件并尽快将其删除,因此如果可能的话,应该避免将数据写入磁盘。它确实不是告诉Windows实际删除文件(完全)。也许您想要FILE_FLAG_DELETE_ON_CLOSE

写入文件的问题似乎很简单:您已指定了第三个参数的0CreateFile。这基本上意味着没有文件共享,因此,只要打开文件的处理方式,其他任何人都无法打开该文件。由于您从未明确关闭使用CreateFile创建的手柄,因此该程序的其他部分没有写入文件的可能性。

我的建议是选择使用I/O的一种类型,并坚持使用。现在,您有了Windows-native CreateFile,C-Style printf和C 样式ofstream的组合。坦白说,这是一团糟。

相关内容

  • 没有找到相关文章

最新更新