2015-04-12 66 views
-1

我写了下面的代码。其中一种方法将检查信号文件是否可以访问,另一种将检查背景文件是否可以存在。我可以将这两种方法/功能合并为一个吗?

bool signalFileExist(string signalFile){ 
    ifstream f(signalFile.c_str()); 
    if(f.good()){ 
     f.close(); 
     return true; 
    } 
    f.close(); 
    return false; 
} 

bool backgroundFileExist (string backgroundFile){ 
    ifstream f(backgroundFile.c_str()); 
    if(f.good()){ 
     f.close(); 
     return true; 
    } 
    f.close(); 
    return false; 
} 

我的问题是:我可以将这两种方法合并为一个吗?另外,如果无法检查,我将需要告诉用户哪些文件不好。是否有可能以这种方式编写该方法?

+2

它们已经是完全一样的功能。它们之间的唯一区别是函数的名称和参数名称。如果他们将名称传递给信号文件或背景文件,则由调用者决定。 – Galik

+0

您的链接器可能*已经*将这两个函数合并为一个。他们产生相同的指令序列。 –

+0

不,你不能。没有你的帮助,编译器永远不会知道字符串'backgroundFile'和'signalFile'之间的区别。 – gaussblurinc

回答

4

他们......是完全一样的方法吗?

你可以仅仅删除其中一方,而另一重命名为这样的:如果你想知道哪个文件是坏在一个错误的情况下,用户

bool fileExists(string fileName){ 
    ifstream f(fileName.c_str()); 
    if(f.good()){ 
     f.close(); 
     return true; 
    } 
    f.close(); 
    return false; 
} 

,你可以做它里面的函数,因为你有文件名,或者你可以在呼叫站点执行。

+0

file.fail()如何工作? – Channing

+1

'f.close()'是完全不必要的。这个函数可以简单地写成'return ifstream(filename.c_str())。good();''还有'fileName'应该由const ref传递,或者甚至直接传递'const char * – sbabbi

相关问题