主頁 > 軟體工程 > 求批量修改檔案名的程式?

求批量修改檔案名的程式?

2020-09-17 02:01:49 軟體工程




如上圖所示選擇了檔案型別后,點擊“選擇路徑”,選擇了一個檔案夾,然后在串列控制元件中顯示搜到的檔案名,想把這些檔案名后面添加一個密級,像0: 不改名;1:“公開”等,舉例:上下拉電阻的作用.pdf變成上下拉電阻的作用(公開).pdf,讓操作者在選擇了Combox 下拉串列控制元件的某一項之后,點擊“重命名”按鈕后,實作如上的操作。這里還有一個要求就是搜出來檔案后,把所有的檔案的檔案名都修改嘍,之后根據需要多選某些特定的檔案名,實作對這些檔案的檔案名的標密,請問實作這些功能應該怎么編程?

uj5u.com熱心網友回復:

CFile::Rename()

uj5u.com熱心網友回復:

樓上OK的,其他的是邏輯問題了

uj5u.com熱心網友回復:

MoveFile API

uj5u.com熱心網友回復:

都羅列了全部檔案了,后面就是用執行緒一個一個的修改了。

uj5u.com熱心網友回復:

為什么不直接生成一個bat批處理檔案然后執行它呢?

uj5u.com熱心網友回復:

參考 4 樓 sichuanpb 的回復:
都羅列了全部檔案了,后面就是用執行緒一個一個的修改了。

請問怎么用執行緒改啊?請指教。

uj5u.com熱心網友回復:

參考 5 樓 zhao4zhong1 的回復:
為什么不直接生成一個bat批處理檔案然后執行它呢?

沒接觸過bat批處理檔案,請詳細說明一下,怎么使用,我是初學。

uj5u.com熱心網友回復:

參考 7 樓 xixia07m 的回復:
Quote: 參考 5 樓 zhao4zhong1 的回復:

為什么不直接生成一個bat批處理檔案然后執行它呢?

沒接觸過bat批處理檔案,請詳細說明一下,怎么使用,我是初學。

百度搜“bat批處理改名”

uj5u.com熱心網友回復:

這樣的問題根本不用編程
dir 列出檔案名
復制到excel里
用excel的文本函式
前面加上ren XXX  新檔案名,拖拉
在貼到.bat檔案里面

uj5u.com熱心網友回復:

不是有個 vector<FileInfo>fileList;

uj5u.com熱心網友回復:

我的需求不是單純的改名,而是編程改名,所以需要您進一步地提示。

uj5u.com熱心網友回復:

void find (LPCTSTR lpPath,std::vector<FileInfo>&FileList)
 {
//std::vector<FileInfo>fileList;
    std::string szFind(lpPath);
WIN32_FIND_DATA FindFileData;
szFind+=_T("\\*.*");
HANDLE hFind=::FindFirstFile(szFind.c_str(),&FindFileData);  //這里用到了szFind
if(INVALID_HANDLE_VALUE=https://bbs.csdn.net/topics/=hFind) return;
do//while(1)       
{
if(FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)   //判斷
{//dir 目錄在串列中可以雙擊打開,不要遞回!
if(FindFileData.cFileName[0]!='.') 
{
std::string szPath(lpPath);
szPath+=_T("\\");
szPath+=FindFileData.cFileName;
TRACE1("%s\n",szPath.c_str());
find(szPath.c_str(),FileList);   //自注:這里小寫的fileList不行。這一句是遞回。
}
}
else 
        {  std::string strFileName=FindFileData.cFileName;//檔案名
 suffixStr=strFileName.substr(strFileName.find_last_of('.')+1);   //這里的后綴就是所有檔案型別的后綴,下面的檔案是所有型別的檔案的顯示。
 if(std::regex_match(suffixStr,suffixStr1))
  { FILETIME ft=FindFileData.ftCreationTime;   //取得創建時間
SYSTEMTIME st={0};
TCHAR buf[64]={0};
FileTimeToLocalFileTime(&(FindFileData.ftCreationTime),&ft);    //轉換成本地時間
FileTimeToSystemTime(&ft,&st);     //在這句之前加上上一句,就不用再小時那里+8了。
sprintf_s(buf,_T("%4d年-%02d月-%02d日%02d:%02d:%02d"),st.wYear,st.wMonth,st.wDay,st.wHour/*北京時間*/,st.wMinute,st.wSecond);
std::string strFilePath=lpPath;
strFilePath+=_T("\\");
strFilePath+=FindFileData.cFileName;   //檔案全路徑名
FileInfo fi;    //自注:結構變數不能代入
fi.szFileName=strFileName;
fi.szFilePath=strFilePath;
fi.szCreateTime=buf;
TRACE1("%s\n",strFileName.c_str());    //自注:這句是后加上的
FileList.push_back(fi);  //自注:push_back(fi)是什么意思?
       }
 else if(suffixStr==suffixStr2)
 {
 FILETIME ft=FindFileData.ftCreationTime;   //取得創建時間
SYSTEMTIME st={0};
TCHAR buf[64]={0};
FileTimeToLocalFileTime(&(FindFileData.ftCreationTime),&ft);    //轉換成本地時間
FileTimeToSystemTime(&ft,&st);     //在這句之前加上上一句,就不用再小時那里+8了。
sprintf_s(buf,_T("%4d年-%02d月-%02d日%02d:%02d:%02d"),st.wYear,st.wMonth,st.wDay,st.wHour/*北京時間*/,st.wMinute,st.wSecond);
std::string strFilePath=lpPath;
strFilePath+=_T("\\");
strFilePath+=FindFileData.cFileName;   //檔案全路徑名
FileInfo fi;    //自注:結構變數不能代入
fi.szFileName=strFileName;
fi.szFilePath=strFilePath;
fi.szCreateTime=buf;
TRACE1("%s\n",strFileName.c_str());    //自注:這句是后加上的
FileList.push_back(fi);  //自注:push_back(fi)是什么意思?
 }
 else if(std::regex_match(suffixStr,suffixStr3))
 {
 FILETIME ft=FindFileData.ftCreationTime;   //取得創建時間
SYSTEMTIME st={0};
TCHAR buf[64]={0};
FileTimeToLocalFileTime(&(FindFileData.ftCreationTime),&ft);    //轉換成本地時間
FileTimeToSystemTime(&ft,&st);     //在這句之前加上上一句,就不用再小時那里+8了。
sprintf_s(buf,_T("%4d年-%02d月-%02d日%02d:%02d:%02d"),st.wYear,st.wMonth,st.wDay,st.wHour/*北京時間*/,st.wMinute,st.wSecond);
std::string strFilePath=lpPath;
strFilePath+=_T("\\");
strFilePath+=FindFileData.cFileName;   //檔案全路徑名
FileInfo fi;    //自注:結構變數不能代入
fi.szFileName=strFileName;
fi.szFilePath=strFilePath;
fi.szCreateTime=buf;
TRACE1("%s\n",strFileName.c_str());    //自注:這句是后加上的
FileList.push_back(fi);  //自注:push_back(fi)是什么意思?
 }  
 else if(std::regex_match(suffixStr,suffixStr4))
 {
 FILETIME ft=FindFileData.ftCreationTime;   //取得創建時間
SYSTEMTIME st={0};
TCHAR buf[64]={0};
FileTimeToLocalFileTime(&(FindFileData.ftCreationTime),&ft);    //轉換成本地時間
FileTimeToSystemTime(&ft,&st);     //在這句之前加上上一句,就不用再小時那里+8了。
sprintf_s(buf,_T("%4d年-%02d月-%02d日%02d:%02d:%02d"),st.wYear,st.wMonth,st.wDay,st.wHour/*北京時間*/,st.wMinute,st.wSecond);
std::string strFilePath=lpPath;
strFilePath+=_T("\\");
strFilePath+=FindFileData.cFileName;   //檔案全路徑名
FileInfo fi;    //自注:結構變數不能代入
fi.szFileName=strFileName;
fi.szFilePath=strFilePath;
fi.szCreateTime=buf;
TRACE1("%s\n",strFileName.c_str());    //自注:這句是后加上的
FileList.push_back(fi);  //自注:push_back(fi)是什么意思?
 }
 else if(suffixStr==suffixStr5)
 {
 FILETIME ft=FindFileData.ftCreationTime;   //取得創建時間
SYSTEMTIME st={0};
TCHAR buf[64]={0};
FileTimeToLocalFileTime(&(FindFileData.ftCreationTime),&ft);    //轉換成本地時間
FileTimeToSystemTime(&ft,&st);     //在這句之前加上上一句,就不用再小時那里+8了。
sprintf_s(buf,_T("%4d年-%02d月-%02d日%02d:%02d:%02d"),st.wYear,st.wMonth,st.wDay,st.wHour/*北京時間*/,st.wMinute,st.wSecond);
std::string strFilePath=lpPath;
strFilePath+=_T("\\");
strFilePath+=FindFileData.cFileName;   //檔案全路徑名
FileInfo fi;    //自注:結構變數不能代入
fi.szFileName=strFileName;
fi.szFilePath=strFilePath;
fi.szCreateTime=buf;
TRACE1("%s\n",strFileName.c_str());    //自注:這句是后加上的
FileList.push_back(fi);  //自注:push_back(fi)是什么意思?
 }
     }
    }while(::FindNextFile(hFind,&FindFileData));
// getchar();
 }    

 是對這段程式進行修改,就可實作我前面提到的功能了嗎?還是又需要別的程式,請指教。

uj5u.com熱心網友回復:

 vector<FileInfo>fileList; 是個 全域 變數 ,用于 填充 list,你用 list 也 可以 取 原檔案 名 (path+NAME)但 速度慢
而讀寫 fileList 要 快得多 !

uj5u.com熱心網友回復:

參考 13 樓 schlafenhamster 的回復:
 vector<FileInfo>fileList; 是個 全域 變數 ,用于 填充 list,你用 list 也 可以 取 原檔案 名 (path+NAME)但 速度慢
而讀寫 fileList 要 快得多 !

  這個全域變數,如何填充list,用list怎么取原檔案名(path+NAME),如何讀寫fileList?

uj5u.com熱心網友回復:

從 m_list 取

int nSelectedItem=m_list.GetSelectionMark();//獲取第幾行
CString name=m_list.GetItemText(nSelectedItem,1);
CString ext=name.Right(name.GetLength()-name.ReverseFind('.'));
CString path=m_list.GetItemText(nSelectedItem,3);
CStringArray ExeName;
char fullname[MAX_PATH];
strcpy(fullname,(LPTSTR)(LPCTSTR)path);
strcat(fullname,"\\");
strcat(fullname,(LPTSTR)(LPCTSTR)name);
afxDump << fullname << "\n";


fileList see "FillList"

uj5u.com熱心網友回復:

參考 15 樓 schlafenhamster 的回復:
從 m_list 取

int nSelectedItem=m_list.GetSelectionMark();//獲取第幾行
CString name=m_list.GetItemText(nSelectedItem,1);
CString ext=name.Right(name.GetLength()-name.ReverseFind('.'));
CString path=m_list.GetItemText(nSelectedItem,3);
CStringArray ExeName;
char fullname[MAX_PATH];
strcpy(fullname,(LPTSTR)(LPCTSTR)path);
strcat(fullname,"\\");
strcat(fullname,(LPTSTR)(LPCTSTR)name);
afxDump << fullname << "\n";


fileList see "FillList"

這段話什么意思?
CString ext=name.Right(name.GetLength()-name.ReverseFind('.'));是得到擴展名吧?
CStringArray  ExeName是干什么的?

uj5u.com熱心網友回復:

上面我參考的這部分程式應該添加到原始對話框程式的什么地方?

uj5u.com熱心網友回復:

要改名 先要得到 原檔案名,通過上面代碼 得到 一個 檔案名 (選中項,全部是 i=0到 GetItemCount)
然后 改名 。
CString ext=name.Right(name.GetLength()-name.ReverseFind('.'));
另有它用, 注意 “機密” 在 ext 前。

uj5u.com熱心網友回復:

參考 18 樓 schlafenhamster 的回復:
要改名 先要得到 原檔案名,通過上面代碼 得到 一個 檔案名 (選中項,全部是 i=0到 GetItemCount)
然后 改名 。
CString ext=name.Right(name.GetLength()-name.ReverseFind('.'));
另有它用, 注意 “機密” 在 ext 前。

得到一個還是自己任選的一批檔案名,GetItemCount在程式里沒出現啊?
CString ext=name.Right(name.GetLength()-name.ReverseFind('.'));干什么用?為什么不是“絕密”在ext前?

uj5u.com熱心網友回復:

你不是 要 讓 “絕密” 等 新名 在ext 前嗎,所以 把 檔案名 先 分成 左右 2部分 ,右邊 ext 名 不變,左邊 名 后 加 “x密”,
再 合并成 新 檔案名 。

uj5u.com熱心網友回復:

下面 是 選擇 m_list 中 檔案(單選或者多選)后 ,點擊 “rename“ 按鈕

// rename 
void CShowdirDlg::OnButton4() 
{
// TODO: Add your control notification handler code here
POSITION pos = m_list.GetFirstSelectedItemPosition();
int nSelectedItem = -1;
while (pos != NULL)
{
nSelectedItem = m_list.GetNextSelectedItem(pos);
CString name  = m_list.GetItemText(nSelectedItem,1);
CString path  = m_list.GetItemText(nSelectedItem,3);
CString extame=name.Right(name.GetLength()-name.ReverseFind('.'));
CString pureName=name.Left(name.ReverseFind('.'));
CString newName=path;
newName += "\\";
newName += pureName;
newName += "機密";// 增加的
newName += extame;
AfxMessageBox(newName);
}
}

uj5u.com熱心網友回復:

dir 列出檔案名后,復制到excel
假設為A列,然后在B列內用公式B1=“ren ”& A1 & “  ” & A1 &  “(公開)”
復制出來,粘貼到記事本中,存為bat檔案

uj5u.com熱心網友回復:

參考 21 樓 schlafenhamster 的回復:
下面 是 選擇 m_list 中 檔案(單選或者多選)后 ,點擊 “rename“ 按鈕

// rename 
void CShowdirDlg::OnButton4() 
{
// TODO: Add your control notification handler code here
POSITION pos = m_list.GetFirstSelectedItemPosition();
int nSelectedItem = -1;
while (pos != NULL)
{
nSelectedItem = m_list.GetNextSelectedItem(pos);
CString name  = m_list.GetItemText(nSelectedItem,1);
CString path  = m_list.GetItemText(nSelectedItem,3);
CString extame=name.Right(name.GetLength()-name.ReverseFind('.'));
CString pureName=name.Left(name.ReverseFind('.'));
CString newName=path;
newName += "\\";
newName += pureName;
newName += "機密";// 增加的
newName += extame;
AfxMessageBox(newName);
}
}

不用對Combox box這個控制元件編程嗎,每個選項都可能需要添加對應的密級到檔案名的后面啊。

uj5u.com熱心網友回復:

"不用對Combox box這個控制元件編程嗎"
要 即 newName += "機密";// 增加的
是 m_cmb 當前 選擇項 (m_cmb。GetWindowText(),即 其 edit 的 內容)

uj5u.com熱心網友回復:

 newName += "機密";// 增加的     這句寫在“重命名”按鈕的程式里,不用寫在Combo box對應的程式里嗎?Combo box程式與重命名按鈕程式邏輯是上是怎樣的聯系呢?m_cmb當前選擇項是怎么回事,編輯框edit程式應該怎么寫?請指教。

uj5u.com熱心網友回復:

"m_cmb當前選擇項是怎么回事"
就是用戶 選擇 密級,你那個 cmb 不要 1.。。。6 ,直接 就是 “機密“  要不然 必須 去除 ‘1“ 。。。’
用戶 選擇 密級 后 cmb 的 edit 顯示 回應 密級 如 “機密“
newName += "機密";
變成 
newName += m_cmb.GetWindowText() ;//

uj5u.com熱心網友回復:


帶點的波浪線顯示了,這是什么錯誤?如果帶著0~5的標號,應該怎么編?

uj5u.com熱心網友回復:

向導要 add 變數 mComboBox (即 IDC_CMB)控制元件

“帶著0~5的標號” 要么用 0到5,要么用 "x密“ , 你的 處理 一下 !

uj5u.com熱心網友回復:

寫在選項里的時候是兩個都要,即0:    不更改;1:       公開;2:     內部;3:  ......等等,真正改名時只要改成XXX(內部).pdf; XXX(機密).docx這種格式的標密檔案就行了,應該怎么改?

uj5u.com熱心網友回復:

0:    不更改 
0: 有什么用 ?
不更改 又有 什么用 ?

"1:       公開"
分 左右 2部分 ,取 右部 即可, 分割 標記 是 tab (09)或者 空格 (0x20)

uj5u.com熱心網友回復:

參考 30 樓 schlafenhamster 的回復:
0:    不更改 
0: 有什么用 ?
不更改 又有 什么用 ?

"1:       公開"
分 左右 2部分 ,取 右部 即可, 分割 標記 是 tab (09)或者 空格 (0x20)

是啊,您說的對,這一項的確是沒用啊。但分割標記是怎么回事tab(09)或空格(0x20)寫在哪里,怎么寫?

uj5u.com熱心網友回復:

分割 標記 是 tab (09)在 cmb 的 list 中 不可見 使用 空格 (0x20)吧,即 “1:“  與   “公開“ 間 用 空格 分開 
用 Find (“     ”)或 ReverseFind (' ') 

uj5u.com熱心網友回復:

參考 32 樓 schlafenhamster 的回復:
分割 標記 是 tab (09)在 cmb 的 list 中 不可見 使用 空格 (0x20)吧,即 “1:“  與   “公開“ 間 用 空格 分開 
用 Find (“     ”)或 ReverseFind (' ') 

用 Find (“     ”)或 ReverseFind (' ') 是怎么個用法,具體寫成代碼是什么樣子?

uj5u.com熱心網友回復:

CString GetSecurityLevel()
{
CString cmbName="1:     公開";// 5 spaces !
int at=cmbName.ReverseFind(' ');
return cmbName.Right(cmbName.GetLength()-at-1);


呼叫
CString sl=GetSecirityLevel();

uj5u.com熱心網友回復:

我把我的程式發給您郵箱了,您幫我看看,具體應該怎么改,多謝了。

uj5u.com熱心網友回復:

對不起 我只用 vc6

uj5u.com熱心網友回復:

參考 34 樓 schlafenhamster 的回復:
CString GetSecurityLevel()
{
CString cmbName="1:     公開";// 5 spaces !
int at=cmbName.ReverseFind(' ');
return cmbName.Right(cmbName.GetLength()-at-1);


呼叫
CString sl=GetSecirityLevel();

CString GetSecurityLevel()是得到密級對吧?int at=cmbName.ReverseFind(' ');是什么意思?接下來兩句是什么意思?呼叫的sl又是什么意思?請指教。除了“公開”以外的其他密級怎么辦?寫在哪兒?

uj5u.com熱心網友回復:

CString cmbName="1:     公開";// 5 spaces !
其他 密級 就是 CString cmbName=m_cmb.GetWindowText() ;// "1:     公開";// 5 spaces !
int at=cmbName.ReverseFind(' ');// c從 右到左 找到 第一個 空格 的 位置 at。

CString  sl=GetSecirityLevel();
newName += sl ;// "機密";

uj5u.com熱心網友回復:



這個錯誤怎么消除?

uj5u.com熱心網友回復:

參考 34 樓 schlafenhamster 的回復:
CString GetSecurityLevel()
{
CString cmbName="1:     公開";// 5 spaces !
int at=cmbName.ReverseFind(' ');
return cmbName.Right(cmbName.GetLength()-at-1);


呼叫
CString sl=GetSecirityLevel();

要想得到其他的密級只需要把程式由
CString cmbName="1:     公開";// 5 spaces !
改為CString cmbName=m_cmb.GetWindowText() ;即可,是吧?

uj5u.com熱心網友回復:


// rename
CString CShowdirDlg::GetSecurityLevel()
{
CString cmbName;
m_Cmb1.GetWindowText(cmbName);//"1:     公開";
int at=cmbName.ReverseFind(' ');
return cmbName.Right(cmbName.GetLength()-at-1);

//
void CShowdirDlg::OnButton4() 
{
// TODO: Add your control notification handler code here
CString sl=GetSecurityLevel();
POSITION pos = m_list.GetFirstSelectedItemPosition();
int nSelectedItem = -1;
while (pos != NULL)
{
nSelectedItem = m_list.GetNextSelectedItem(pos);
CString name  = m_list.GetItemText(nSelectedItem,1);
CString path  = m_list.GetItemText(nSelectedItem,3);
CString extname=name.Right(name.GetLength()-name.ReverseFind('.'));
CString pureName=name.Left(name.ReverseFind('.'));
CString newName=path;
newName += "\\";
newName += pureName;
newName += sl;// "機密";// 增加的
newName += extname;
AfxMessageBox(path + "\\"+ name + " To " + newName);
// CFile::Rename(path + "\\"+ name, newName );
}
}

uj5u.com熱心網友回復:

// rename
CString CShowdirDlg::GetSecurityLevel()
{
    CString cmbName;
    m_Cmb1.GetWindowText(cmbName);//"1:     公開";
    int at=cmbName.ReverseFind(' ');
    return cmbName.Right(cmbName.GetLength()-at-1);

//這個函式是不是就是應該寫到我VC2010程式的void XXXDlg:: OnCbnselchangeCombo()處呢?

uj5u.com熱心網友回復:

不必,這是取當前選擇項,與 當前選擇項改變 無關。
因為 CString sl=GetSecurityLevel(); 是第一句 (不在while內),以后所有list的多選項 會用同一個 密級 改名

uj5u.com熱心網友回復:

那我自動生成的  void XXXDlg:: OnCbnselchangeCombo()宣告
{
     //ToD:在此添加控制元件通知處理程式代碼
}
這里針對我需要實作的功能,需要寫些什么呢?

uj5u.com熱心網友回復:

參考 41 樓 schlafenhamster 的回復:

// rename
CString CShowdirDlg::GetSecurityLevel()
{
CString cmbName;
m_Cmb1.GetWindowText(cmbName);//"1:     公開";
int at=cmbName.ReverseFind(' ');
return cmbName.Right(cmbName.GetLength()-at-1);

//
void CShowdirDlg::OnButton4() 
{
// TODO: Add your control notification handler code here
CString sl=GetSecurityLevel();
POSITION pos = m_list.GetFirstSelectedItemPosition();
int nSelectedItem = -1;
while (pos != NULL)
{
nSelectedItem = m_list.GetNextSelectedItem(pos);
CString name  = m_list.GetItemText(nSelectedItem,1);
CString path  = m_list.GetItemText(nSelectedItem,3);
CString extname=name.Right(name.GetLength()-name.ReverseFind('.'));
CString pureName=name.Left(name.ReverseFind('.'));
CString newName=path;
newName += "\\";
newName += pureName;
newName += sl;// "機密";// 增加的
newName += extname;
AfxMessageBox(path + "\\"+ name + " To " + newName);
// CFile::Rename(path + "\\"+ name, newName );
}
}

點Combox box 控制元件的下拉框選項,對應這里m_Cmb1.GetWindowText(cmbName);,m_Cmb1中的GetWindowText的內容為1:     公開;2:    內部;3:     秘密........。等
還有請問:while以下的陳述句是什么意思,看不懂啊。

uj5u.com熱心網友回復:

 while (pos != NULL) 是 檢查 m_list 有多少 選擇 項, 取出 選擇項的 id。
m_list 屬性應該 是 多選。
用戶 操作 如下 , 移動 滑鼠 在 list 界面中 選擇 任意多 項,(或 再改變 密級),點擊 “Rename”, 那么 這批 檔案就 同時 改名 到 一個 密級。

uj5u.com熱心網友回復:



這里的三個錯誤應該如何改,請指教。

uj5u.com熱心網友回復:

void CremarksecretDlg::ListShow(int pageNo)
{      
    UINT nCount=fileList.size();   //得到控制元件的行數   總的檔案個數。
    UINT i;
//int pageNo=1;
    Start=pageSize*(pageNo-1);
End=pageSize*pageNo;
CString empty;   //難道是這里定義錯了?
    CString name;
    CString time;
    CString fpath;
mlist.LockWindowUpdate(); 
mlist.DeleteAllItems();     //要想實作翻頁效果這句必不可少。
for(i=Start;i<End;i++)  //改成i=0;i<50也還是不行,這里不是邏輯出了問題,而是其它的問題。
 {  
if(i>=nCount)break;
empty.Format(_T("%d"),i+1);     
int nRow=mlist.InsertItem(i,empty);    //這句話什么意思?
afxDump<<nRow<<"\n";    //這句對翻頁沒有影響
name.Format(_T("%s\n"),fileList[i].szFileName.c_str());
mlist.SetItemText(nRow,1,name);      //插入列   自注:從這里開始程式就不對了,這句還是對的
time.Format(_T("%s\n"),fileList[i].szCreateTime.c_str());
    mlist.SetItemText(nRow,2,time);
fpath.Format(_T("%s\n"),fileList[i].szFilePath.c_str());   //不影響翻頁
mlist.SetItemText(nRow,3,fpath);
 }
    mlist.UnlockWindowUpdate();
// getchar();
}
        


void CremarksecretDlg::OnCbnSelchangeCombo()
{
// TODO: 在此添加控制元件通知處理程式代碼
}



CString CremarksecretDlg::GetSecurityLevel()
{
    CString cmbName;
    mComeboBox.GetWindowText(cmbName);//"1:     公開";
    int at=cmbName.ReverseFind(' ');
    return cmbName.Right(cmbName.GetLength()-at-1);


void CremarksecretDlg::OnBnClickedButton4()
{
// TODO: 在此添加控制元件通知處理程式代碼
CString sl=GetSecurityLevel();
    POSITION pos = mlist.GetFirstSelectedItemPosition();
    int nSelectedItem = -1;
    while (pos!=NULL)
    {
        nSelectedItem = mlist.GetNextSelectedItem(pos);
        CString name  = mlist.GetItemText(nSelectedItem,1);
        CString path  = mlist.GetItemText(nSelectedItem,3);
        CString extname=name.Right(name.GetLength()-name.ReverseFind('.'));
        CString pureName=name.Left(name.ReverseFind('.'));
        CString newName=path;
        newName += "\\";
        newName += pureName;
        newName += sl;// "機密";// 增加的
        newName += extname;
        AfxMessageBox(path + "\\"+ name + " To " + newName);
//        CFile::Rename(path + "\\"+ name, newName );
    }
}


這兩段程式中都有CString變數,變數相同,有沒有沖突啊?我這些程式這么寫被證實有問題,因為沒有在檔案名后面添加(公開),(內部),(秘密)等密級,請問是怎么回事。

uj5u.com熱心網友回復:

"這兩段程式中都有CString變數,變數相同,有沒有沖突啊"
概念錯誤 !
CString變數 ! CString 是 某變數 的 型別,不是 變數 , 如 int 是 整數 型別, 不是 整數 變數 !


mComeboBox.GetWindowText(cmbName);
 檢查  cmbName 是否 空 :     if(cmbName.IsEmpty()) return CString(錯誤);

在 rename 前 要 選擇 mComeboBox

uj5u.com熱心網友回復:

對,您說的對,CString是變數型別,我就是想知道這兩段程式中的同樣變數型別的同名變數,用起來有沒有沖突?

rename前,我選擇mComeboBox的下拉框的選項了,但是Rename后就是沒顯示XXX(公開).pdf,XXX(秘密).doc等類似的標密檔案。

檢查  cmbName 是否 空 :     if(cmbName.IsEmpty()) return CString(錯誤);有什么用?

uj5u.com熱心網友回復:

兩段程式中的同樣變數型別的同名變數
這是 變數的作用域的 問題 ,某段程式 中 的變數 ,只在 該 程式 有用 (通常 變數在 堆疊 中!), 出 這個 程式 就
沒用了 , 單 同一段 函式中 ,變數不能 同名 ! 這是 變數的唯一性 (編譯器 會報警)

uj5u.com熱心網友回復:

       CString time; time 是 預定義 型別 。改為
        CString tm;

uj5u.com熱心網友回復:

請指點,多謝了。

uj5u.com熱心網友回復:

好壓軟體似乎自帶批處理改名功能。

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/60986.html

標籤:基礎類

上一篇:請問MFC+VS2017怎么做出來這樣的圖片瀏覽功能

下一篇:0x80004003 無效指標

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more