2

私は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();
}

一時ファイルが作成されます。ただし、このプログラムには 2 つの主な問題があります。

1) アプリケーションが終了すると、一時ファイルは破棄されません。2) ファイル ストリームがファイルを開いておらず、テキストを書き込んでいない。

これらの問題をどのように解決できますか?ありがとう :)

4

1 に答える 1

3

Windowsに提供する場合FILE_ATTRIBUTE_TEMPORARY基本的にはアドバイザリです。これは、これを一時ファイルとして使用し、すぐに削除することをシステムに通知するため、可能であればディスクへのデータの書き込みを避ける必要があります。Windowsに実際にファイルを削除するようには指示しませ(まったく)。たぶんあなたが欲しいですか?FILE_FLAG_DELETE_ON_CLOSE

ファイルへの書き込みの問題は非常に単純に見えます0。3番目のパラメーターをに指定しましたCreateFile。これは基本的にファイル共有がないことを意味し、ファイルへのハンドルが開いている限り、他の誰もそのファイルを開くことができません。で作成したハンドルを明示的に閉じることは決してないためCreateFile、そのプログラムの他の部分でファイルに書き込む可能性はありません。

私のアドバイスは、使用するI / Oのタイプを1つ選び、それに固執することです。現在、WindowsネイティブCreateFile、Cスタイルprintf、およびC++スタイルの組み合わせがありますofstream。率直に言って、それは混乱です。

于 2012-11-07T16:00:03.330 に答える