我在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)文件流没有打开文件,也没有写任何文本。
请问这些问题怎么解决?谢谢:))
答案 0 :(得分:3)
当您向Windows提供FILE_ATTRIBUTE_TEMPORARY
时,基本上是建议性的 - 它告诉系统您打算将其用作临时文件并尽快删除,因此应避免写入如果可能,数据到磁盘。它不告诉Windows实际删除文件(根本)。也许你想要FILE_FLAG_DELETE_ON_CLOSE
?
写入文件的问题非常简单:您已为0
的第三个参数指定了CreateFile
。这基本上意味着没有文件共享,所以只要该文件的句柄是打开的,没有其他任何东西可以打开该文件。由于您从未明确关闭使用CreateFile
创建的句柄,因此该程序的其他任何部分都无法真正写入该文件。
我的建议是选择一种类型的I / O来使用,并坚持下去。现在,您拥有Windows原生CreateFile
,C风格printf
和C ++风格ofstream
的组合。坦率地说,这是一团糟。