2016-09-26 46 views
1

這裏是我的問題: 我想展開用戶在SaveFileDialog中用程序索引號給出程序的FileName。 我從對話框中獲得完整的路徑並搜索'。'在裏面。從SaveDialog中獲取FileName並將其動態更改C++

System::String^ str = saveFileDialog1->FileName; 
    pin_ptr<const wchar_t> wch = PtrToStringChars(str); 
    size_t convertedChars = 0; 
    size_t sizeInBytes = ((str->Length + 1) * 2); 
    errno_t err = 0; 
    char *FileName = (char*)malloc(sizeInBytes); 
    err = wcstombs_s(&convertedChars, 
     FileName, sizeInBytes, 
     wch, sizeInBytes); 
for (size_t i = 0; i < sizeof((*FileName)); i++) 
    { 

     if (FileName [i]=='.') 
     { 



     } 
} 

,並在這一點上,我曾嘗試不同的東西與編輯的文件名:

insert(i-1, ("_%i",i)); 

沒有什麼我都試過,效果如何我想它。

我想保存照相機的不同照片,並且使用此索引,用戶更容易找到他想要的照片。

提前致謝!

克努特

+0

我不明白什麼是你真正想要的目的。你能從用戶的角度描述完整的用例嗎? – Firzen

+0

用戶可以選擇程序應該拍攝多少張照片。然後該程序自動拍攝具有不同相機設置的照片。我想在文件名中找到一部分設置。然後它更容易找到圖片。在文件名末尾增加數字僅用於測試它如何工作。 –

+0

用戶給我例如路徑c:\ user \ document \ filename.txt。我想要做的是,我的程序保存一個新的圖像作爲文件名_1並增加每個新圖像的數量。 –

回答

0

所以,你基本上需要的文件名與一些指數分裂,其原料名稱和擴展名,然後再加入這些部件。您可以使用此功能:

string get_indexed_name(string filename, string index) 
{ 
    size_t lastindex = filename.find_last_of(".");  // get position of dot 
    string rawname = filename.substr(0, lastindex); // get string contents before dot 
    string extension = filename.substr(lastindex + 1); // get string contents after dot 

    return rawname + index + "." + extension;   // return indexed name 
} 

這種方式使用預定義的標準函數。如果您想自己完成(並學習),請嘗試執行功能find_last_ofsubstr。然後你可以使用你自己的實現。

如果有一些編譯的問題,一定要與這些線開始你的源代碼:

#include <iostream> 
using namespace std; 
+0

準確當您發佈您的答案我得到它我的自我:D。感謝您的解決方案和您的問題,讓我可以通過我自己找到解決方案。 –

+0

我很高興你能夠自己解決它。恭喜! – Firzen

0

這裏是我的解決方案:

System::String^ str = saveFileDialog1->FileName; 


    std::string sFilePath = msclr::interop::marshal_as<std::string>(str); 
    std::string fileExtension=msclr::interop::marshal_as<std::string>(str); 
    size_t pos= sFilePath.find('.', 1); 
    sFilePath = sFilePath.substr(0, pos); 
    fileExtension = fileExtension.substr(pos);        
    for(size_t i=0; i<100; i++){        
      std::string fileName; 
      fileName = sFilePath + std::to_string(i) + fileExtension;} 

對於這個解決方案,你必須包含。

#include <msclr\marshal_cppstd.h> 

如果你想你的文件編號是含鉛零,你必須使用 字符串流是這樣的:

 string fileName; 
     string fileNumber ; 
     stringstream ss; 
     ss <<'_'<< setfill('0') << setw(4) << std::to_string(i); 
     fileNumber = ss.str(); 
     fileName = f_sFilePath + fileNumber + f_sFileExtension; 
相關問題