for (int i = 1; i < argc; ++i) {
if (_tcscmp(argv[i], _T("-src")) == 0) {
srcfile = argv[++i]; // 若路徑含空格且未加引號,argv[i] 只取到第一個空格前
}
}
src.open(srcfile, ios::in); // 打開失敗
命令行參數按空格分割。若用戶輸入:
program -src "C:\My Docs\file.txt"
則 argv 正確包含完整路徑。但若用戶忘記引號:
program -src C:\My Docs\file.txt
則 argv[i] 為 "C:\My",下一個參數為 "Docs\file.txt",導致路徑截斷。
if (_tcscmp(argv[i], _T("-src")) == 0) {
srcfile = argv[++i];
// 若後續參數不以 - 開頭,視為路徑一部分
while (i + 1 < argc && argv[i+1][0] != '-') {
srcfile += _T(" ") + argv[++i];
}
}
std::filesystem::path (C++17)#include <filesystem>
std::filesystem::path p(srcfile);
if (std::filesystem::exists(p)) { /* ... */ }
// 解析後立即打印
_tprintf(_T("srcfile = [%s]\n"), srcfile.c_str());
_tprintf(_T("tgtfile = [%s]\n"), tgtfile.c_str());
在 src.open() 前設置斷點,確認路徑正確。