2010-11-20 35 views
12

Tôi muốn làm một cái gì đó như thế này: Trong một vòng lặp, lần đầu tiên lặp lại viết một số nội dung vào một tập tin có tên file0.txt, thứ hai iteration file1.txt và như vậy, chỉ cần tăng số lượng.Làm thế nào để tự động thay đổi tên tệp khi viết trong một vòng lặp?

FILE *img; 
int k = 0; 
while (true) 
{ 
      // here we get some data into variable data 

    file = fopen("file.txt", "wb"); 
    fwrite (data, 1, strlen(data) , file); 
    fclose(file); 

    k++; 

      // here we check some condition so we can return from the loop 
} 

Trả lời

15
int k = 0; 
while (true) 
{ 
    char buffer[32]; // The filename buffer. 
    // Put "file" then k then ".txt" in to filename. 
    snprintf(buffer, sizeof(char) * 32, "file%i.txt", k); 

    // here we get some data into variable data 

    file = fopen(buffer, "wb"); 
    fwrite (data, 1, strlen(data) , file); 
    fclose(file); 

    k++; 

    // here we check some condition so we can return from the loop 
} 
+1

+1 cho 'snprintf' over' sprintf'. –

2
FILE *img; 
int k = 0; 
while (true) 
{ 
    // here we get some data into variable data 
    char filename[64]; 
    sprintf (filename, "file%d.txt", k); 

    file = fopen(filename, "wb"); 
    fwrite (data, 1, strlen(data) , file); 
    fclose(file); 
    k++; 

      // here we check some condition so we can return from the loop 
} 
2

để tạo tên tập tin sử dụng sprintf:

char filename[16]; 
sprintf(filename, "file%d.txt", k); 
file = fopen(filename, "wb"); ... 

(mặc dù đó là một giải pháp C, do đó thẻ không đúng)

7

Một cách khác nhau để làm trong C++:

#include <iostream> 
#include <fstream> 
#include <sstream> 

int main() 
{ 
    std::string someData = "this is some data that'll get written to each file"; 
    int k = 0; 
    while(true) 
    { 
     // Formulate the filename 
     std::ostringstream fn; 
     fn << "file" << k << ".txt"; 

     // Open and write to the file 
     std::ofstream out(fn.str().c_str(),std::ios_base::binary); 
     out.write(&someData[0],someData.size()); 

     ++k; 
    } 
} 
+0

Giải pháp tốt, đã làm việc với tôi :) –

1

Tôi đã thực hiện điều này theo cách dưới đây. Lưu ý rằng không giống như một vài ví dụ khác, điều này sẽ thực sự biên dịch và hoạt động như dự định mà không có bất kỳ sửa đổi nào bên cạnh bộ tiền xử lý bao gồm. Giải pháp dưới đây lặp lại năm mươi tên tập tin.

int main(void) 
{ 
    for (int k = 0; k < 50; k++) 
    { 
     char title[8]; 
     sprintf(title, "%d.txt", k); 
     FILE* img = fopen(title, "a"); 
     char* data = "Write this down"; 
     fwrite (data, 1, strlen(data) , img); 
     fclose(img); 
    } 
} 
+0

bạn có nghĩa là 51 tên: 0 và 50 mỗi tên được tính là một tên (không chắc chắn là tên bạn quên để giải thích). Bạn có thể thấy điều này một cách nhanh chóng bằng cách lưu ý rằng từ 0 đến 10 (<11) thực sự có 11 tên. – insaner

+0

tôi hiểu. cố định của nó. –

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