常用的字符串文件文件夹操作

自己整理的一个类,需要的添加到工程中直接用就可以了。

 1 /* ******* StrDirFile.h **********
 2 ********* 文件操作函数声明 ********** */
 3
 4 /* author: autumoon */
 5
 6 #ifndef _STR_DIR_FILE_
 7 #define _STR_DIR_FILE_
 8
 9 #pragma comment(linker,"/manifestdependency:\"type=‘win32‘ name=‘Microsoft.Windows.Common-Controls‘ version=‘6.0.0.0‘ processorArchitecture=‘x86‘ publicKeyToken=‘6595b64144ccf1df‘ language=‘*‘\"")
10
11 #include <afxdlgs.h> //打开文件
12 #include <ShlObj.h> //浏览文件夹
13
14 class CStrDirFile
15 {
16 public:
17     CString m_strInput;
18     CStrDirFile();
19     CStrDirFile(const char szPath[]);
20     CStrDirFile(CString strPath);
21
22 public:
23     bool IsDir();
24     bool IsDir(CString strPath);
25     bool IsFile();
26     bool IsFile(CString strPath);
27
28     //字符串操作
29     char* CstringToChar(CString strCstring); //注意防止通过修改char*指向的内容损坏CString结构
30
31     CString GetDirOfDir();//获取目录的上一级目录
32     CString GetDirOfDir(CString strDirPath);//获取目录的上一级目录
33     CString GetDirOfFile(); //获取文件的所在的目录
34     CString GetDirOfFile(CString strFilePath); //获取文件的所在的目录
35     CString GetNameOfDir(CString strDirPath); //获取某个路径的最里层的目录名
36     CString GetNameOfFile(CString strFilePath, bool bWithSuffix = true); //获取全文件全路径中的文件名
37     CString FloatToCstring(const float fNum, const int nDigit = 6);
38     CString IntToCstring(const int nNum);
39     CString ParseLineInCsv(CString strLine, const int nColumn); //返回csv行的某一列的值
40     CString ShowTheInput(); //显示当前输入参数
41
42     //文件操作
43     bool IfExistFile();
44     bool IfExistFile(const char szPath[]);
45     bool IfExistFile(CString strFilePath);
46
47     //后缀相关的字符串注意都使用小写
48     CString OpenSuffixFile(const char szPath[]); //打开特定类型的文件,返回路径
49     CString OpenSuffixFile(CString strSuffix = CString("txt")); //打开特定类型的文件,返回路径
50     CString OpenSuffixFile(const int nSuffix, ...); //打开多种类型的文件,返回路径
51     CString OpenFile(); //打开任意类型的文件,返回路径
52     CString OpenTXT(); //打开txt文件,返回路径
53
54     int ParseTXTFile(CStringArray* pArrContentInFile);
55     int ParseTXTFile(const char szPath[], CStringArray* pArrContentInFile);
56     int ParseTXTFile(CString strFilePath, CStringArray* pArrContentInFile);
57     int SaveTXTFile(const char szPath[], CStringArray& arrContent, bool bAppend = false);
58     int SaveTXTFile(CString strTxtPath, CStringArray& arrContent, bool bAppend = false);
59
60     //文件夹操作
61     bool IfExistDir();
62     bool IfExistDir(const char szPath[]);
63     bool IfExistDir(CString strDirPath);
64
65     CString BrowseDir(char szTips[]);
66     CString BrowseDir(CString strTips = CString("请选择文件夹")); //浏览一个文件夹
67     CString BrowseDirPlus(CString strTips = CString("请选择文件夹")); //浏览一个文件夹, 带新建按钮
68
69     int ReadCurrentDirs(CStringArray* pArrDirsInFolder); //读取当前目录下的目录,不包含子目录
70     int ReadCurrentDirFiles(CStringArray* pArrFilesInFolder, char szSuffix[] = ".txt"); //读取当前目录下的文件,不包含子目录
71     int ReadDirs(CString strPath, CStringArray* pArrDirsInFolder, bool bIncludeSub = true); //读取当前目录下的目录
72     int ReadDirFiles(CString strPath, CStringArray* pArrFilesInFolder, char szSuffix[] = ".txt", bool bIncludeSub = true); //读取当前目录下的文件
73
74 };
75
76
77 #endif //_STR_DIR_FILE_
  1 /* ******* StrFileDir.cpp **********
  2 ********* 文件操作函数实现 ********** */
  3
  4 /* author: autumoon */
  5 #include "StrDirFile.h"
  6
  7 /* 构造函数 */
  8 CStrDirFile::CStrDirFile():m_strInput("D:\\autumoon")
  9 {
 10
 11 }
 12
 13 CStrDirFile::CStrDirFile(const char szPath[])
 14 {
 15     CString strPath(szPath);
 16     m_strInput = strPath;
 17 }
 18
 19 CStrDirFile::CStrDirFile(CString strPath):m_strInput(strPath)
 20 {
 21
 22 }
 23
 24 bool CStrDirFile::IsDir()
 25 {
 26     return IfExistDir(m_strInput);
 27 }
 28
 29 bool CStrDirFile::IsDir(CString strPath)
 30 {
 31     return IfExistDir(strPath);
 32 }
 33
 34 bool CStrDirFile::IsFile()
 35 {
 36     return IfExistFile(m_strInput);
 37 }
 38
 39 bool CStrDirFile::IsFile(CString strPath)
 40 {
 41     return IfExistFile(strPath);
 42 }
 43
 44 CString CStrDirFile::GetDirOfDir(CString strDirPath)
 45 {
 46     if (strDirPath.Right(1) == ‘\\‘)
 47     {
 48         strDirPath = strDirPath.Mid(0, strDirPath.GetLength() - 1);
 49     }
 50
 51     int index = strDirPath.ReverseFind(‘\\‘);
 52
 53     if (index != -1)
 54     {
 55         return strDirPath.Mid(0, index);
 56     }
 57     else
 58     {
 59         return strDirPath;
 60     }
 61 }
 62
 63 CString CStrDirFile::GetDirOfFile()
 64 {
 65     return GetDirOfFile(m_strInput);
 66 }
 67
 68 CString CStrDirFile::GetDirOfFile(CString strFilePath)
 69 {
 70     if (IsDir(strFilePath))
 71     {
 72         return strFilePath;
 73     }
 74
 75     int index = strFilePath.ReverseFind(‘\\‘);
 76     return strFilePath.Mid(index + 1, strFilePath.GetLength() - index -1);
 77 }
 78
 79 CString CStrDirFile::OpenFile()
 80 {
 81     CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("所有文件(*.*)|*.*||"));
 82
 83     CString szFileName("");
 84
 85     if (IsDir())
 86     {
 87         dlg.m_ofn.lpstrInitialDir = m_strInput;
 88     }
 89     else
 90     {
 91         dlg.m_ofn.lpstrInitialDir = GetDirOfFile();
 92     }
 93
 94     if (dlg.DoModal() == IDOK)
 95     {
 96         szFileName = dlg.GetPathName();
 97     }
 98
 99     return szFileName;
100 }
101
102 CString CStrDirFile::OpenTXT()
103 {
104     CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("txt文件(*.txt)|*.txt|所有文件(*.*)|*.*||"));
105
106     CString szFileName("");
107
108     if (IsDir())
109     {
110         dlg.m_ofn.lpstrInitialDir = m_strInput;
111     }
112     else
113     {
114         dlg.m_ofn.lpstrInitialDir = GetDirOfFile();
115     }
116
117     if (dlg.DoModal() == IDOK)
118     {
119         szFileName = dlg.GetFileName();
120     }
121
122     return szFileName;
123 }
124
125 CString CStrDirFile::OpenSuffixFile(CString strSuffix)
126 {
127     if (strSuffix.Left(1) == ‘.‘)
128     {
129         //delete the ‘.‘ before suffix
130         strSuffix = strSuffix.Mid(1, strSuffix.GetLength() - 1);
131     }
132
133     CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, strSuffix + "文件(*." + strSuffix + ")|*." + strSuffix + "|所有文件(*.*)|*.*||");
134
135     CString szFileName("");
136
137     if (IsDir())
138     {
139         dlg.m_ofn.lpstrInitialDir = m_strInput;
140     }
141     else
142     {
143         dlg.m_ofn.lpstrInitialDir = GetDirOfFile();
144     }
145
146     if (dlg.DoModal() == IDOK)
147     {
148         szFileName = dlg.GetPathName();
149     }
150
151     return szFileName;
152 }
153
154 CString CStrDirFile::OpenSuffixFile(const int nSuffix, ...)
155 {
156     va_list argp;
157     char* para;
158     va_start(argp, nSuffix);
159
160     CStringArray arrSuffixs;
161     CString strSuffix;
162     for (int i = 0; i < nSuffix; i++)
163     {
164         strSuffix = va_arg(argp, char*);
165         arrSuffixs.Add(strSuffix);
166     }
167     va_end(argp);
168
169     //打开多种类型
170     for (int i = 0; i < nSuffix; i++)
171     {
172         if (arrSuffixs[i].Left(1) == ‘.‘)
173         {
174             //delete the ‘.‘ before suffix
175             arrSuffixs[i] = arrSuffixs[i].Mid(1, arrSuffixs[i].GetLength() - 1);
176         }
177     }
178
179     CString strTemp("");
180     for (int i = 0; i < nSuffix; i++)
181     {
182         strTemp += arrSuffixs[i] + "文件(*." + arrSuffixs[i] + ")|*." + arrSuffixs[i] + "|";
183     }
184
185     CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, strTemp + "所有文件(*.*)|*.*||");
186
187     CString szFileName("");
188
189     if (IsDir())
190     {
191         dlg.m_ofn.lpstrInitialDir = m_strInput;
192     }
193     else
194     {
195         dlg.m_ofn.lpstrInitialDir = GetDirOfFile();
196     }
197
198     if (dlg.DoModal() == IDOK)
199     {
200         szFileName = dlg.GetPathName();
201     }
202
203     return szFileName;
204 }
205
206 bool CStrDirFile::IfExistFile()
207 {
208     return IfExistFile(m_strInput);
209 }
210
211 bool CStrDirFile::IfExistFile(const char szPath[])
212 {
213     CString strFilePath = CString(szPath);
214     return IfExistFile(strFilePath);
215 }
216
217 bool CStrDirFile::IfExistFile(CString strFilePath)
218 {
219     CFile file;
220     if (file.Open(strFilePath,CFile::modeRead))
221     {
222         file.Close();
223         return true;
224     }
225     return false;
226 }
227
228 CString CStrDirFile::OpenSuffixFile(const char szPath[])
229 {
230     CString strPath(szPath);
231     return OpenSuffixFile(strPath);
232 }
233
234 int CStrDirFile::ParseTXTFile(CStringArray* pArrContentInFile)
235 {
236     return ParseTXTFile(m_strInput, pArrContentInFile);
237 }
238
239 int CStrDirFile::ParseTXTFile(const char szPath[], CStringArray* pArrContentInFile)
240 {
241     CString strFilePath(szPath);
242     return ParseTXTFile(strFilePath, pArrContentInFile);
243 }
244
245 int CStrDirFile::ParseTXTFile(CString strFilePath, CStringArray* pArrContentInFile)
246 {
247     CStdioFile file;
248     file.Open(strFilePath, CFile::modeRead);
249
250     if (!file.m_pStream)
251     {
252         return -1;
253     }
254     CString szLine;
255     while(file.ReadString(szLine))
256     {
257         pArrContentInFile->Add(szLine);
258     }
259
260     return 0;
261 }
262
263 int CStrDirFile::SaveTXTFile(const char szPath[], CStringArray& arrContent, bool bAppend)
264 {
265     CString strTxtPath(szPath);
266     SaveTXTFile(strTxtPath, arrContent, bAppend);
267
268     return 0;
269 }
270
271 int CStrDirFile::SaveTXTFile(CString strTxtPath, CStringArray& arrContent, bool bAppend)
272 {
273     CStdioFile file;
274     if (bAppend)
275     {
276         file.Open(strTxtPath, CFile::modeCreate|CFile::modeReadWrite|CFile::modeNoTruncate);
277         file.SeekToEnd();
278     }
279     else
280     {
281         file.Open(strTxtPath, CFile::modeCreate|CFile::modeReadWrite);
282     }
283
284     for (int i = 0; i < arrContent.GetCount(); i++)
285     {
286         file.WriteString(arrContent[i]);
287     }
288     file.Close();
289
290     return 0;
291 }
292
293
294 bool CStrDirFile::IfExistDir()
295 {
296     return IfExistDir(m_strInput);
297 }
298
299 bool CStrDirFile::IfExistDir(const char szPath[])
300 {
301     CString strDirPath(szPath);
302
303     return IfExistDir(strDirPath);
304 }
305
306 bool CStrDirFile::IfExistDir(CString strDirPath)
307 {
308     //本方法不能判断根目录
309     WIN32_FIND_DATA fd;
310     bool ret = FALSE;
311     HANDLE hFind = FindFirstFile(strDirPath, &fd);
312     if ((hFind != INVALID_HANDLE_VALUE) && (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
313     {
314         //目录存在
315         ret = TRUE;
316
317     }
318     FindClose(hFind);
319
320     return ret;
321 }
322
323 CString CStrDirFile::BrowseDir(char szTips[]/* = "请选择文件夹"*/)
324 {
325     CString strTips = CString(szTips);
326     return BrowseDir(strTips);
327 }
328
329 CString CStrDirFile::BrowseDir(CString strTips/* = CString("请选择文件夹")*/)
330 {
331     CString szFileFolderPath;
332     TCHAR pszPath[MAX_PATH];
333     BROWSEINFO biFolder;
334     biFolder.hwndOwner = NULL;
335     biFolder.pidlRoot = NULL;
336     biFolder.pszDisplayName = NULL;
337     biFolder.lpszTitle = strTips;
338     biFolder.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;
339     biFolder.lpfn = NULL;
340     biFolder.lParam = 0;
341
342     LPITEMIDLIST pidl = SHBrowseForFolder(&biFolder);
343     if (!pidl)
344     {
345         return "";
346     }
347     else
348     {
349         SHGetPathFromIDList(pidl, pszPath);
350         m_strInput = pszPath;
351         return pszPath;
352     }
353 }
354
355 CString CStrDirFile::BrowseDirPlus(CString strTips/* = CString("请选择文件夹")*/)
356 {
357     CString szFileFolderPath;
358     TCHAR pszPath[MAX_PATH];
359     BROWSEINFO biFolder;
360     biFolder.hwndOwner = NULL;
361     biFolder.pidlRoot = NULL;
362     biFolder.pszDisplayName = NULL;
363     biFolder.lpszTitle = strTips;
364     biFolder.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT | BIF_NEWDIALOGSTYLE;
365     biFolder.lpfn = NULL;
366     biFolder.lParam = 0;
367
368     LPITEMIDLIST pidl = SHBrowseForFolder(&biFolder);
369     if (!pidl)
370     {
371         return "";
372     }
373     else
374     {
375         SHGetPathFromIDList(pidl, pszPath);
376         m_strInput = pszPath;
377         return pszPath;
378     }
379 }
380
381 CString CStrDirFile::GetNameOfDir(CString strDirPath)
382 {
383     int index = strDirPath.ReverseFind(‘\\‘);
384     return strDirPath.Mid(index + 1, strDirPath.GetLength() - index -1);
385 }
386
387 CString CStrDirFile::GetNameOfFile(CString strFilePath, bool bWithSuffix)
388 {
389     int index = strFilePath.ReverseFind(‘\\‘);
390     CString strFileName = strFilePath.Mid(index + 1, strFilePath.GetLength() - index - 1);
391
392     if (bWithSuffix)
393     {
394         return strFileName;
395     }
396     else
397     {
398         int nIndexOfDot = strFileName.ReverseFind(‘.‘);
399         if (nIndexOfDot == -1)
400         {
401             return strFileName;
402         }
403         else
404         {
405             return strFileName.Mid(0, nIndexOfDot);
406         }
407     }
408
409 }
410
411 CString CStrDirFile::FloatToCstring(const float fNum, const int nDigit)
412 {
413     CString strTemp;
414     strTemp.Format(_T("%.") + IntToCstring(nDigit) + _T("lf"), fNum);
415     return strTemp;
416 }
417
418 CString CStrDirFile::IntToCstring(const int nNum)
419 {
420     CString strTemp;
421     strTemp.Format(_T("%d"), nNum);
422     return strTemp;
423 }
424
425 CString CStrDirFile::ParseLineInCsv(CString strLine, const int nColumn)
426 {
427     CString strContent;
428     AfxExtractSubString(strContent, strLine, nColumn, ‘,‘);
429     return strContent;
430 }
431
432 CString CStrDirFile::ShowTheInput()
433 {
434     return m_strInput;
435 }
436
437 char* CStrDirFile::CstringToChar(CString strCstring)
438 {
439 #ifdef _UNICODE
440     USES_CONVERSION;
441     return W2A(strCstring);
442 #else
443     return (LPSTR)(LPCTSTR)strCstring;
444 #endif
445 }
446
447 int CStrDirFile::ReadCurrentDirs(CStringArray* pArrDirsInFolder)
448 {
449     if (IsFile())
450     {
451         return -1;
452     }
453
454     return ReadDirs(m_strInput, pArrDirsInFolder, false);
455 }
456
457 int CStrDirFile::ReadCurrentDirFiles(CStringArray* pArrFilesInFolder, char szSuffix[]/* = ".txt"*/)
458 {
459     if (IsFile())
460     {
461         return -1;
462     }
463
464     return ReadDirFiles(m_strInput, pArrFilesInFolder, szSuffix, false);
465 }
466
467 int CStrDirFile::ReadDirs(CString strPath, CStringArray* pArrDirsInFolder, bool bIncludeSub/* = true*/)
468 {
469     CFileFind ff;
470     DWORD size = 0;
471     CString szDir = strPath + _T("\\*.*"); //搜索路径,包括所有子目录
472     BOOL ret = ff.FindFile(szDir);
473
474     while (ret)
475     {
476         ret = ff.FindNextFile();
477
478         if(!ff.IsDots())
479         {
480             if(ff.IsDirectory() && !ff.IsHidden())
481             {
482                 //子目录结点,递归
483                 pArrDirsInFolder->Add(ff.GetFilePath());
484                 if (bIncludeSub)
485                 {
486                     ReadDirs(ff.GetFilePath(), pArrDirsInFolder);
487                 }
488             }
489         }
490     }
491
492     return 0;
493 }
494
495 int CStrDirFile::ReadDirFiles(CString strPath, CStringArray* pArrFilesInFolder, char szSuffix[]/* = "txt"*/, bool bIncludeSub/* = true*/)
496 {
497     CFileFind ff;
498     DWORD size = 0;
499
500     CString szDir = strPath + _T("\\*.*"); //搜索路径,包括所有子目录
501     BOOL ret = ff.FindFile(szDir);
502
503     if (IsFile(strPath))
504     {
505         return -1;
506     }
507
508     while (ret)
509     {
510         ret = ff.FindNextFile();
511
512         if(!ff.IsDots())
513         {
514             if(ff.IsDirectory() && bIncludeSub)
515             {
516                 //子目录结点,递归
517                 ReadDirFiles(ff.GetFilePath(), pArrFilesInFolder, szSuffix, bIncludeSub);
518             }
519             else
520             {
521                 if (ff.GetFileName().MakeLower().Find(CString(szSuffix)) != -1)
522                 {
523                     pArrFilesInFolder->Add(ff.GetFilePath());
524                 }
525             }
526         }
527     }
528
529     return 0;
530 }

OK! Enjoy it!

常用的字符串文件文件夹操作

时间: 2024-10-06 18:38:41

常用的字符串文件文件夹操作的相关文章

MFC常用的字符串、文件、目录操作(双11版本)

修改日志: 1.增加了list容器存储: 2.修改了IsFile 和 IsDir的实现,使区别于IfExistFile和IfExistDir; 3.修改了部分函数的名称: 4.其他细节修改: 首先是头文件: /* ******* StrDirFile.h ********** ********* 字符串.文件.目录操作函数声明 ********** */ /* author: autumoon */ #ifndef _STR_DIR_FILE_ #define _STR_DIR_FILE_ #p

MFC常用的字符串、文件、目录操作

因为经常写一些文件处理的MFC程序,反复写同样的程序很头疼,于是自己编写整理了一个类,可以直接使用. 分享给需要经常进行这些操作的朋友,代码非常简单,如果有疏漏之处,还请多多指教. 首先是头文件: /* ******* StrDirFile.h ********** ********* 字符串.文件.目录操作函数声明 ********** */ /* author: autumoon */ #ifndef _STR_DIR_FILE_ #define _STR_DIR_FILE_ #pragma

linux 下文件及文件夹操作常用命令

文件及文件夹操作 1.创建文件夹 " mkdir 文件夹名 " 这样就会在当前目录创建一个文件夹. 2.复制文件 cp 3.剪切 mv 编辑文件内容 vi 或vim 一般来说vi是基本功能,vim比vi功能强大一些. 一些基本的操作是 打开或新新文件   vi 文件路径 打开时是只读模式,要写编辑先输入一个i 这时就是插入模式 就可以录入你想录的信息了. 当录完后,可以保存退出,方法是 先按"ESC"退出插入模式,然后 输入 :wq  然后回车,就保存退出了. 也可

文件和文件夹操作

一.文件操作 1.File类的常用静态方法: void AppendAllText(string path, string contents),将文本contents附加到文件path中 bool Exists(string path)判断文件path是否存在 string[] ReadAllLines(string path) 读取文本文件到字符串数组中 string ReadAllText(string path) 读取文本文件到字符串中 void WriteAllText(string p

linux —— 学习笔记(文件、文件夹操作)

目录:1.常用的文件文件夹操作 2.文件属性的设置 1.常用的文件文件夹操作 mkdir  创建文件夹 -p 如果指定 a/b/c 时 a .b 不存在,一起创建出来 cp       复制文件或文件夹 -r 复制文件夹 rmdir   删除空的文件夹 -p 类似于mkdir 沿途为空则一起删除 rm       删除文件或文件夹 -rf 递归静默删除 mv      移动文件(重命名)       如果目标和源 目录未改变,则移动的效果为重命名 2.文件属性的设置 chmod  改变文件的mo

用C#操作文件/文件夹(删除,复制,移动)

操作某一个文件/文件夹,需要一个文件的完整路径 一.使用File的静态方法进行文件操作 //使用file的静态方法进行复制 File.Copy(path, destpath); //使用File的静态方法删除路径下的一个文件 File.Delete(path); //使用File的静态方法移动路径下的一个文件 File.Move(path, destpath); File.ReadAllText(path); //打开一个文本文件*.txt ,读取文件中数据,然后关闭该文件 //写入 File.

iOS开发——Swift篇&amp;文件,文件夹操作

文件,文件夹操作 ios开发经常会遇到读文件,写文件等,对文件和文件夹的操作,这时就可以使用NSFileManager,NSFileHandle等类来实现. 下面总结了各种常用的操作: 1,遍历一个目录下的所有文件 1 //假设用户文档下有如下文件和文件夹[test1.txt,fold1/test2.txt] 2 let manager = NSFileManager.defaultManager() 3 let urlForDocument = manager.URLsForDirectory

C#文件夹操作

一.文件夹操作 Directory类,DirectoryInfo类.使用using System.IO命名空间 (一)创建文件夹 方法一: 1 private string path = @"F:\Text\ceshi"; 2 private void Create_Click(object sender, EventArgs e) 3 { 4 Directory.CreateDirectory(path); 5 } 方法二: 1 private string path = @&quo

BAT批处理之文件与文件夹操作代码(附xcopy命令详解)

批处理中的文件.文件夹操作,xcopy命令的用法. 一,建bat文件自动执行复制,删除命令. 例1:复制cd.dll文件至windows\system32的bat文件内容: copy cd.dll %windir%\system32 例2:卸载windows\system32目录中的cd.dll,即把上面复制的文件删除: del %windir%\system32\cd.dll 例3:删除download文件夹中的文件,例子如下: del C:\DOWNLOAD\*.* 注意,以处的del命令只