Короткий ответ: Вы не можете.
Более длинный ответ: Пользуйтесь библиотекой проклятий (ncurses на Unix, pdcurses в Windows). NCurses должен быть доступным через Ваш диспетчер пакетов, и и ncurses и pdcurses имеют тот же самый интерфейс (pdcurses, может также создать окна независимо из консоли, которые ведут себя как консоли).
самый трудный ответ: Используйте #ifdef _WIN32
и материал как этот, чтобы заставить Ваш код действовать по-другому на различные операционные системы.
Вам необходимо открыть файл в режиме записи:
myfile.open ("C:\\Users\\Thorgeir\\Documents\\test.txt", ios::out);
Не забудьте также изучить другие параметры для этого второго аргумента. Если вы пишете двоичные данные, вам понадобится, например, ios :: binary
.
Вы также должны проверить поток после его открытия:
myfile.open(...
if (myfile.is_open())
...
Обновление:
AraK прав, Я забыл, что ofstream
по умолчанию находится в режиме записи, так что проблема не в этом.
Возможно, у вас просто нет прав на запись / создание в каталог? Win7 по умолчанию использует множество каталогов со специальными разрешениями «запретить все».
Начните с поворота косой черты.
Даже Windows понимает, что косая черта - это наоборот.
ofstream myfile("C:/Users/Thorgeir/Documents/test.txt");
Вы можете проверить наличие ошибок:
if (!myfile)
{
std::cout << "Somthing failed while opening the file\n";
}
else
{
myfile << "Writing this to a file.\n";
myfile.close();
}
Читали ли вы о UAC (Контроль учетных записей пользователей) и UAC Virtualization / Data Redirection в Windows Vista и 7? Возможно, ваш файл на самом деле находится в виртуальном хранилище.
Перенаправление данных управления учетными записями пользователей
Ваш пример выходного каталога находится в Users, поэтому я не думаю, что это будет проблемой, но об этой возможности стоит упомянуть и что-то, что может быть очень неприятным, если вы этого не замечаете!
Надеюсь, это поможет.
Попробуйте следующее:
if( ! myfile)
{
cerr << "You have failed to open the file\n";
//find the error code and look up what it means.
}
Этот код должен обнаруживать любую ошибку. Скорее всего, это проблема разрешений, если возникают какие-либо ошибки. Убедитесь, что вы можете читать / писать в папку, в которой вы создаете файл.
#include "stdafx.h"
#include <fstream>
#include <iostream>
bool CheckStreamErrorBits(const std::ofstream& ofile);
int _tmain(int argc, _TCHAR* argv[]) {
std::ofstream ofile("c:\\test.txt");
if(ofile.is_open()) {
CheckStreamErrorBits(ofile);
ofile << "this is a test" << std::endl;
if(CheckStreamErrorBits(ofile)) {
std::cout << "successfully wrote file" << std::endl;
}
}else {
CheckStreamErrorBits(ofile);
std::cerr << "failed to open file" << std::endl;
}
ofile.close();
return 0;
}
//return true if stream is ok. return false if stream has error.
bool CheckStreamErrorBits(const std::ofstream& ofile) {
bool bError=false;
if(ofile.bad()) {
std::cerr << "error in file stream, the bad bit is set" << std::endl;
bError=true;
}else if(ofile.fail()) {
std::cerr << "error in file stream, the fail bit is set" << std::endl;
bError=true;
}else if(ofile.eof()) {
std::cerr << "error in file stream, the eof bit is set" << std::endl;
bError=true;
}
return !bError;
}
Обновление: Я просто тестирую свой код под Windows 7 Enterprize, и он не сработал с первого раза (был установлен бит ошибки). Затем я выключаю контроль учетных записей (UAC) и снова тестирую, и он записал файл. Вероятно, это та же проблема, что и вы. Чтобы выключить UAC, перейдите по ссылке:
Панель управления (вид маленькими значками) | Учетные записи пользователей | Измените настройки контроля учетных записей пользователей. Установите для него значение Никогда не уведомлять, затем нажмите кнопку ОК. Вам придется перезапустить, чтобы изменения вступили в силу.
Мне любопытно, как заставить его работать с включенным UAC, я изучу это.
Используйте FileMon и ищите неудачные вызовы WriteFile из вашего процесса.