2011-03-19 3 views
9

Я использую Visual C++ 2008. Я хочу создать текстовый файл и написать на нем.создать текстовый файл и написать на нем

char filename[]="C:/k.txt"; 
FileStream *fs = new FileStream(filename, FileMode::Create, FileAccess::Write); 
fstream *fs =new fstream(filename,ios::out|ios::binary); 
fs->write("ghgh", 4); 
fs->close(); 

Здесь показывает ошибку из FileStream

+0

отредактируйте ваше сообщение и добавьте точное сообщение об ошибке, которое у вас есть. Также, вероятно, поможет полный код (правильно отформатированный, с заголовками). – Mat

+0

@user: Откуда берется «FileStream»? Почему вы создаете два потока? Почему вы создаете свои потоки динамически? Вы программист на Java, который переключился на C++? –

+1

FileStream? Это класс .NET? Вы пытаетесь сделать C++? Или C++/CLI? –

ответ

12

Вы получите ошибку, потому что вы fs объявили дважды двумя различными способами; но я не буду хранить ничего из этого кода, так как это странное сочетание C++ и C++/CLI.

В вашем вопросе не ясно, хотите ли вы выполнять стандартные C++ или C++/CLI; если вы хотите «нормальный» C++, вы должны сделать:

#include <fstream> 
#include <iostream> 

// ... 

int main() 
{ 
    // notice that IIRC on modern Windows machines if you aren't admin 
    // you can't write in the root directory of the system drive; 
    // you should instead write e.g. in the current directory 
    std::ofstream fs("c:\\k.txt"); 

    if(!fs) 
    { 
     std::cerr<<"Cannot open the output file."<<std::endl; 
     return 1; 
    } 
    fs<<"ghgh"; 
    fs.close(); 
    return 0; 
} 

Обратите внимание, что я удалил все new вещи, так как очень часто вам не нужно это в C++ - вы можете просто выделить объект потока в стеке и забыть о утечках памяти, которые присутствовали в вашем коде, поскольку обычные указатели (не GC) не подвергаются сбору мусора.

+3

может * и должен * [просто выделить в стеке] –

3

Вот примеры как родной и управляемый C++:

Предполагая, что вы довольны родное решение следующих работ просто отлично:

fstream *fs =new fstream(filename,ios::out|ios::binary); 
fs->write("ghgh", 4); 
fs->close(); 
delete fs;  // Need delete fs to avoid memory leak 

Однако, я бы не использовать динамическую память для fstream объект (т. е. новый оператор и точки). Вот новая версия:

fstream fs(filename,ios::out|ios::binary); 
fs.write("ghgh", 4); 
fs.close(); 

EDIT, вопрос был отредактирован, чтобы запросить родное решение (первоначально было неясно), но я оставлю этот ответ, как это может быть полезным для кого-то

Если вы ищете опцию C++ CLI (для управляемого кода), я рекомендую использовать StreamWriter вместо FileStream. StreamWriter позволит вам работать с управляемыми строками. Обратите внимание, что удаление будет вызывать метод Dispose на интерфейсе IDisposable и сборщиком мусора будет освободить память в конце концов:

StreamWriter ^fs = gcnew StreamWriter(gcnew String(filename)); 
fs->Write((gcnew String("ghgh"))); 
fs->Close(); 
delete fs; 
-3

создания текста. Спросите пользователя, хотите ли он отправить его. Если он скажет «да», это означает, что это конкретное сообщение должно быть помечено как сообщение исходящего сообщения, иначе оно должно быть сообщением «Входящие».

+1

Вопрос явно о файлах '.txt', а не о СМС-сообщениях. Ничто в этом ответе не относится к текстовым файлам или Visual C++ 2008. –

+0

@Amad Munir Что вы думали во время публикации ответа –

Смежные вопросы