2011-03-19 52 views
9

Tôi đang sử dụng Visual C++ 2008. Tôi muốn tạo tệp văn bản và viết trên đó.tạo một tệp văn bản và viết trên đó

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(); 

đây đang hiển thị lỗi của FileStream

+0

vui lòng chỉnh sửa bài đăng của bạn và thêm thông báo lỗi chính xác mà bạn có. Ngoài ra mã hoàn chỉnh (được định dạng đúng, với các tiêu đề) có thể sẽ giúp ích. – Mat

+0

@user: FileStream' xuất phát từ đâu? Tại sao bạn tạo hai luồng? Tại sao bạn tạo luồng động của mình? Bạn có phải là lập trình viên Java đã chuyển sang C++ không? –

+1

FileStream? Đó là một lớp .NET phải không? Bạn đang cố gắng làm C++? Hoặc C++/CLI? –

Trả lời

12

Bạn nhận được một lỗi bởi vì bạn có fs tuyên bố hai lần trong hai cách khác nhau; nhưng tôi sẽ không giữ bất cứ điều gì của mã đó, vì nó là một sự pha trộn kỳ lạ của C++ và C++/CLI.

Trong câu hỏi của bạn không rõ liệu bạn có muốn làm chuẩn C++ hoặc C++/CLI hay không; giả sử bạn muốn "bình thường" C++, bạn nên làm:

#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; 
} 

Chú ý rằng tôi loại bỏ tất cả những thứ new từ rất lâu thì bạn không cần nó trong C++ - bạn chỉ có thể phân bổ các đối tượng dòng trên stack và hãy quên đi các rò rỉ bộ nhớ đã có trong mã của bạn, vì các con trỏ bình thường (không được GC quản lý) không bị thu gom rác.

+3

có thể * và * * [chỉ phân bổ trên ngăn xếp] –

3

Dưới đây là những ví dụ cho cả bản và quản lý C++:

Giả sử bạn đang hài lòng với một giải pháp tự nhiên các công việc sau tốt:

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

Tuy nhiên, tôi sẽ không sử dụng bộ nhớ động cho fstream đối tượng (tức là câu lệnh và điểm mới). Đây là phiên bản mới:

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

EDIT, câu hỏi đã được chỉnh sửa để yêu cầu một giải pháp tự nhiên (ban đầu nó là không rõ ràng), nhưng tôi sẽ để lại câu trả lời này vì nó có thể được sử dụng cho một người nào đó

Nếu bạn đang tìm kiếm tùy chọn C++ CLI (đối với mã được quản lý), tôi khuyên bạn nên sử dụng StreamWriter thay cho FileStream. StreamWriter sẽ cho phép bạn làm việc với Managed Strings. Lưu ý rằng xóa sẽ gọi phương thức Vứt bỏ trên giao diện IDisposable và Garbage Collected sẽ giải phóng bộ nhớ cuối cùng:

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

bạn tạo một văn bản. Hỏi người dùng nếu anh ta muốn gửi nó. Nếu anh ta nói có, điều này có nghĩa là thông báo cụ thể này phải được gắn thẻ là tin nhắn hộp thư đi nếu không nó sẽ là một tin nhắn hộp thư đến.

+1

Câu hỏi rõ ràng về các tệp '.txt', chứ không phải tin nhắn SMS. Không có gì trong câu trả lời này liên quan đến tệp văn bản hoặc Visual C++ 2008. –

+0

@Amad Munir Bạn đang nghĩ gì khi đăng câu trả lời đó –

Các vấn đề liên quan