2010-11-20 16 views
12

मैं ऐसा कुछ करना चाहता हूं: एक लूप में, पहले पुनरावृत्ति फ़ाइल सामग्री को फ़ाइल 0.txt, दूसरी पुनरावृत्ति फ़ाइल 1.txt नामक फ़ाइल में लिखें और इसी तरह, बस संख्या बढ़ाएं। ऐसा करने के लिएलूप में लिखते समय फ़ाइल नाम को गतिशील रूप से कैसे बदलें?

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

एक अलग तरह से (हालांकि कि एक सी समाधान है तो टैग सही नहीं है)

उत्तर

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। –

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

तो sprintf का उपयोग कर फ़ाइल नाम बनाने यह सी ++ में:

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

:

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 
} 
+0

अच्छा समाधान, मेरे साथ काम किया :) –

1

मैंने इसे नीचे दिए गए तरीके से पूरा किया। ध्यान दें कि कुछ अन्य उदाहरणों के विपरीत, यह वास्तव में प्रीप्रोसेसर के बगल में किसी भी संशोधन के बिना संकलित और कार्य करेगा। नीचे दिया गया समाधान पचास फ़ाइल नामों को फिर से चलाता है।

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

आपका मतलब है 51 नाम: 0 और 50 प्रत्येक एक नाम के रूप में गिना जाता है (सुनिश्चित नहीं है कि आप किसके लिए खाता भूल गए हैं)। आप यह देखकर जल्दी से देख सकते हैं कि 0 से 10 (<11) वास्तव में 11 नाम हैं। – insaner

+0

मुझे यह मिल गया। यह तय हो चुका है। –

संबंधित मुद्दे