2013-08-06 14 views
11

Daha hızlı giriş için, file-redirection yapabildiğinizi ve önceden ayarlanmış olan cin girişleri içeren bir dosya eklediğimi okudum.C++ dosya yönlendirme

Bu teori ben C++ Primer kitapta anlaşıldığı kadarıyla

App.exe inputfile outputfile 

aşağıdaki gibi kullanılmalıdır, aşağıdaki C++ kodu [1] metin dosyasından cin giriş okuma olmalı ve olmamalı gerektiğini [2]

[2]

include <fstream> 
ofstream myfile; 
myfile.open(); 

[1] aşağıdaki C++ kod ...

gibi herhangi bir diğer özel endikasyon için gereken
#include <iostream> 
int main(){ 
    int val; 
    std::cin >> val; //this value should be read automatically for inputfile 
    std::cout << val; 
    return 0; 
} 

App.exe <inputfile> outputfile 

de kullanabilirsiniz:

Bu durumda
App.exe <inputfile>> outputfile 

çıkışı ile rewrited olmaz

+0

Evet & kodunuzda Şimdi

[App.exe inputfile outputfile]

outputfile yani girişdosyası iki komut satırı argümanları sağladığınız Kullanılmış. –

cevap

17

[1] böyle program aramak zorunda kodunuzu kullanmak için Komutun her koşulu, ancak çıktı zaten varolan dosyaya eklenir.

Windows'ta giriş ve çıkış yönlendirme hakkında daha fazla bilgiyi here bulabilirsiniz. <, > ve >> sembolleri olduklarını


Not onlar sadece bu açıklamaya sunum amaçlı değildir — harfi harfine girilecek. Yani, örneğin:

App.exe <file1>> file2 
+5

Ayrıca, App.exe < inputfile >> outputfile' kullanabilirsiniz. Ekstra '>' dikkat edin. Bu sayede yeni çıktı, önceki içeriğin silinmesi yerine dosyaya eklenir. – Kelm

+1

Teşekkürler @gawi, Ben < and > bir değişken veya bir şey belirtmek için kullanılmış olduğunu düşündüm. – zurfyx

+0

@Jerry Hoş geldiniz, btw programınızı hızlandırmak istiyorsanız printf/scanf işlevlerini daha çok kullanabilirsiniz, ya da gerçekten veri okuma/yazma hızını artırmak istiyorsanız fgets/put işlevlerini kullanın (ancak bunu yapmanız gerekir) ne yaptığını biliyorsun :)) – gawi

5

orijinal yönlendirme ek olarak >/>> ve

< Sen de std::cin ve std::cout yönlendirebilirsiniz. Aşağıdaki gibi

:

int main() 
{ 
    // Save original std::cin, std::cout 
    std::streambuf *coutbuf = std::cout.rdbuf(); 
    std::streambuf *cinbuf = std::cin.rdbuf(); 

    std::ofstream out("outfile.txt"); 
    std::ifstream in("infile.txt"); 

    //Read from infile.txt using std::cin 
    std::cin.rdbuf(in.rdbuf()); 

    //Write to outfile.txt through std::cout 
    std::cout.rdbuf(out.rdbuf()); 

    std::string test; 
    std::cin >> test;   //from infile.txt 
    std::cout << test << " "; //to outfile.txt 

    //Restore back. 
    std::cin.rdbuf(cinbuf); 
    std::cout.rdbuf(coutbuf); 

} 
0

Sen executible için komut satırı girdi olarak dosya adını sağlayabilir

[Sadece Soru kullanılan komut satırı argümanı anlatıyorum], ama sonra açmaya gerek onları kodunda.bu değil nasıl olmalıdır -

Like You

#include<iostream> 
#include<fstream> 
#include<string> 

int main(int argc, char * argv[]) 
{ 
    //argv[0] := A.exe 
    //argv[1] := inputFile 
    //argv[2] := outputFile 

    std::ifstream vInFile(argv[1],std::ios::in); 
    // notice I have given first command line argument as file name 

    std::ofstream vOutFile(argv[2],std::ios::out | std::ios::app); 
    // notice I have given second command line argument as file name 

    if (vInFile.is_open()) 
    { 
    std::string line; 

    getline (vInFile,line); //Fixing it as per the comment made by MSalters 

    while (vInFile.good()) 
    { 
     vOutFile << line << std::endl; 
     getline (vInFile,line);   
    } 
    vInFile.close(); 
    vOutFile.close(); 
    } 

    else std::cout << "Unable to open file"; 

    return 0; 
} 
+0

Kod, sahte bir son satır ekler. Son okuma başarısız olduğunda, _first_ 'line' yazıp' vOutFile' yazıp sadece vInFile.good() 'ı kontrol edebilirsiniz. Döngüdeki doğru sıralama şöyle olmalıdır: 'okuma çizgisi, okunmuş olup olmadığını kontrol et, satır yaz, not ok ' – MSalters

+0

Evet İşaret ettiğin için teşekkürler. Düzelteceğim –