#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. большое вам спасибо ,я использовал ваш код, и он отлично работает