2017-01-20 166 views
0

我的程序使用或不使用路徑(直接或間接)獲取文件名。 我想從argv中使用文件名作爲輸出文件名的一部分。 問題是,有時來自argv的文件名包含路徑,有時不會。從文件名中提取文件名,路徑來自參數

我想要做的是 1.如果文件名包含路徑,只提取文件名並返回文件名。 2.如果文件名不包含路徑,則返回文件名。

目前我的代碼是提前

std::string input_trace_filename = argv[1]; 
    std::string read_filename = input_trace_filename + ".read."; 
    std::string write_filename = input_trace_filename + ".write."; 

感謝。

+0

顯示你已經嘗試過的情況。 –

+0

文件名中有空格嗎? – KimKulling

+1

查找最後一個斜槓,參見[這裏](http://stackoverflow.com/questions/21254728/c-string-equivalent-for-strrchr)。 –

回答

0

您可以使用此:

std::string filename = string(argv[1]); 
int index = filename.find_last_of("/\\"); 
std::string input_trace_filename = filename.substr(index+1); 
+0

也許檢查在Windows中?請記住,正斜槓'/'在Windows中也是一個有效的路徑分隔符(自MS-DOS日子以來)。 –

+0

在Windows中,'/'在Web地址中有效,但不在本地路徑中?無論如何,如剛纔提到的那樣。 –

+1

@Someprogrammerdude:是的,也許在理想情況下,應該找到兩個索引並使用更大的索引。 –