2009-02-22 36 views
7

Tôi cần phải viết tất cả các chương trình đầu ra của tôi vào một tập tin văn bản. Tôi tin rằng nó được thực hiện theo cách này,Viết TẤT CẢ chương trình đầu ra vào một tập tin txt trong C++

sOutFile << stdout; 

nơi sOutFile là đối tượng ofstream mà tạo ra các tập tin như thế này:

sOutFile("CreateAFile.txt"); // CreateAFile.txt is created. 

Khi tôi chèn stdout vào đối tượng sOutFile, tôi nhận được một số mã mà dường như giống với mã số bát phân [hệ thập lục phân] hoặc một địa chỉ thuộc loại nào đó trong tệp văn bản mà tôi đã tạo.

0x77c5fca0 

Nhưng điều gây nhầm lẫn với tôi là trong chương trình của tôi, tôi sử dụng cout nhiều lần. Chủ yếu chỉ là lời tuyên bố. Nếu tôi không nhầm thì đó là đầu ra của chương trình.

Nếu mã này là địa chỉ, nó có chứa tất cả đầu ra của tôi không? Tôi có thể đọc lại chương trình và tìm ra cách đó không?

Tôi có thể làm gì để có được TẤT CẢ sản lượng chương trình của mình được ghi vào tệp văn bản?

+0

Tôi nghĩ rằng tuyên bố rằng việc tạo lại file nên được 'ofstream sOutFile (" CreateAFile.txt "); '. Đúng? –

Trả lời

7

Đây là một bản sao của: this question

Bạn có thể chuyển hướng stdout, stderr và stdin sử dụng std::freopen.

Từ liên kết ở trên:

/* freopen example: redirecting stdout */ 
#include <stdio.h> 

int main() 
{ 
    freopen ("myfile.txt","w",stdout); 
    printf ("This sentence is redirected to a file."); 
    fclose (stdout); 
    return 0; 
} 

Bạn cũng có thể chạy chương trình của bạn thông qua cửa sổ lệnh như vậy:

a.exe > stdout.txt 2> stderr.txt 
6

Nếu bạn muốn tất cả đầu ra trong một tệp văn bản, bạn không cần mã thêm bất kỳ thứ gì.

từ dòng lệnh:

program > output.txt 

Nếu bạn chỉ muốn chuyển hướng đầu ra chắc chắn bạn có thể sử dụng ostream như dirkgently gợi ý.

15

Nếu chương trình của bạn đã sử dụng cout/printf và bạn muốn gửi tất cả mọi thứ bạn đang đầu ra vào một tập tin, bạn chỉ có thể chuyển hướng stdout để trỏ đến một tập tin trước khi cuộc gọi hiện tại của bạn: http://support.microsoft.com/kb/58667

Mã liên quan:

freopen("file.txt", "w", stdout); 
cout << "hello file world\n"; // goes to file.txt 
freopen("CON", "w", stdout); 
printf("Hello again, console\n"); // redirected back to the console 

Ngoài ra nếu bạn chỉ muốn một số điều cần được in vào một tập tin, bạn chỉ muốn một output stream tập tin thường xuyên: http://www.cplusplus.com/doc/tutorial/files.html

Mã liên quan:

ofstream myfile; 
myfile.open("file.txt"); 
myfile << "Hello file world.\n"; 
printf("Hello console.\n"); 
myfile.close(); 

EDIT để câu trả lời tổng hợp từ John T và Brian Bondy:
Cuối cùng, nếu bạn đang chạy nó từ dòng lệnh, bạn có thể chỉ cần chuyển hướng đầu ra như mọi người khác đề cập bằng cách sử dụng các nhà điều hành chuyển hướng ">" hoặc thêm ">>":

myProg > stdout.txt 2> stderr.txt 
+0

chắp thêm eh ... có vẻ là những gì mọi người đang làm với câu trả lời của tôi cho họ. 1 cho nỗ lực của bạn mặc dù. –

+0

Joel nói rằng một điều tốt cần làm là quay trở lại một câu hỏi và kết hợp tất cả các câu trả lời tốt .. đó là một công việc bẩn thỉu, nhưng ai đó phải làm điều đó. Và thật ngớ ngẩn khi để lại câu trả lời không đầy đủ vì những người khác đưa ra những gợi ý mà bạn không nghĩ đến, vì vậy tôi cố gắng bỏ phiếu cho bạn và thêm nó vào tôi nữa. –

+0

Bạn có lẽ cũng nên đề cập đến chuyển hướng stderr (với "2> x.txt" hoặc "2> & 1" nếu tôi nhớ chính xác.) – aib

3

Sau đó, bạn không thể sử dụng lệnh std :: cout ở bất kỳ nơi nào khác để in nội dung từ chương trình của mình. Thay đổi std :: cout thành std :: ostream và sau đó chuyển tập tin của bạn hoặc std :: cout theo yêu cầu.

3
sOutFile << stdout; 

trong C "stdout" được định nghĩa là biến số FILE*. Nó chỉ là một con trỏ. Xuất nó vào một tệp chỉ ghi giá trị của con trỏ, trong trường hợp của bạn: 0x77c5fca0 vào tệp.

Nếu bạn muốn hướng đầu ra của mình vào một tệp, hãy viết tệp đó ở vị trí đầu tiên hoặc chuyển hướng đầu ra của chương trình của bạn tới tệp bằng dòng lệnh.

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