Я хочу записать в файл с помощью ofstream, но это мне ничего не дает

#c #file-writing

Вопрос:

Я создал три каталога с _mkdir() помощью , и я хочу создать текстовый файл в последнем, но он ничего мне не дает.

Вот код:

 #include "stdafx.h"
#include <direct.h>
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
    
int _tmain(int argc, _TCHAR* argv[])
{
    int t;
    string path, subpath;
    path = "D:";
    subpath = "d";
    for (int i = 0; i < 3; i  )
    {
        path = path   "\"   subpath;
        t=_mkdir(path.c_str());
        if (t)
            cout << "create directoryn";
        else
            cout << "unable to create directoryn";
    }
    fstream file;
    file.open("filetest.txt", ios::out||ios::in);
    file << "haha";
    cin.get();
    return 0;
}
 

Комментарии:

1. что значит «ничего мне не дает»? Файл не создан? Файл эмпирический?

2. ios::out||ios::in — опечатка, так и должно быть ios::out|ios::in . Но тогда это значение по умолчанию, поэтому его можно полностью опустить.

3. Если _mkdir сбой произойдет один раз, он, скорее всего, завершится неудачей три раза. Кроме того, вы используете результат _mkdir неправильно, он возвращается 0 (false), если это удается . Кроме того, зачем создавать каталог, если вы не собираетесь его использовать? Вы никогда не переходите в этот каталог, вместо этого файл создается в рабочем каталоге процесса. О, и, наконец ios::out||ios::in , используется логический оператор или, и результат будет 1 . Вы должны использовать побитовый оператор или | (один символ канала).

4. В названии упоминается ofstream (что именно вам нужно), но код использует fstream .

5. Вероятно, вы хотите создать файл в самом глубоком каталоге, поэтому вам следует сделать: file.open(path "/filetest.txt", ios::out);

Ответ №1:

Вы создаете файл в рабочем каталоге вместо последнего созданного каталога. Заменять

 file.open("filetest.txt", ios::out||ios::in);
 

с

 path = path   "\filetest.txt";
file.open(path.c_str(), ios::out|ios::in);
 

Комментарии:

1. Пути могут быть std::string объектами, начиная со стандарта C 11, нет необходимости в c_str() вызове.

2. Кто знает, что использует стандартная операция. OP может использовать vc 6 из-за stdafx.h.

3. @S. M. большое вам спасибо ,я использовал ваш код, и он отлично работает