gpt4 book ai didi

c++ - 写入临时文件

转载 作者:搜寻专家 更新时间:2023-10-31 01:52:01 26 4
gpt4 key购买 nike

我有以下 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----\n\n");
printf("In this program, we are going to create five temporary files and store some text in them\n\n");

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!\n\n");

ofstream out(converted_path);

if(!out)
{
printf("The file cannot be opened!\n\n");
}
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 时,基本上是建议性的——它告诉系统您打算将其用作临时文件并尽快将其删除,因此它应尽可能避免将数据写入磁盘。它不会告诉 Windows 实际删除该文件(根本没有)。也许您想要 FILE_FLAG_DELETE_ON_CLOSE

写入文件的问题看起来很简单:您已将 0 指定为 CreateFile 的第三个参数。这基本上意味着没有文件共享,所以只要文件的句柄打开,就没有其他东西可以打开该文件。由于您从未显式关闭使用 CreateFile 创建的句柄,因此该程序的任何其他部分都不可能写入文件。

我的建议是选择一种类型的 I/O 来使用,并坚持使用。现在,您拥有 Windows 原生 CreateFile、C 风格 printf 和 C++ 风格 ofstream 的组合。坦率地说,这是一团糟。

关于c++ - 写入临时文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13272889/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com