我试图创建一个用于教育目的的程序,该程序应该能够将.exe
的同一目录中的一个文件(任何扩展名,文件名永不改变)复制到所有主目录中的目录。
例如,我有:
在这种情况下,程序应该将file.something复制到directory1,2和3中。
通过使用此代码,我可以访问.exe
文件夹的绝对路径:
char basePath[255]="";
_fullpath(basePath,argv[0],sizeof(basePath));
理想情况下,要解决问题,可以进行两项功能:
第一个功能:
Input:
(char[]) The .exe's folder if necessary
Output:
(int) Number of folders inside the .exe's folder.
第二功能:
input:
(int) which folder to pick
(int) total number of folders
(char[]) the .exe's folder if necessary
Output:
(char[]) the name of the folder
使用这两个函数(应该返回一个字符数组而不是字符串,因为我被迫使用这些数组来使代码工作)我能够做一个简单的循环,改变目的地&#每次39; s文件夹并将文件复制到它。
当然,如果存在更好的解决方案,问题是如何解决的,那就这样吧。
最后一件事:如果您可以添加每个块或命令所做的事情,我会非常高兴,因为我仍在学习c ++,而且我目前是初学者。
答案 0 :(得分:0)
假设:
[_fullpath()
] 1 _fillpath()
而不是_wfullpath()
如何使用Windows?
您可以使用FindFirstFile()和FindNextFile()来遍历目录。 MSDN有nice example如何使用它们。
不幸的是,FindFirstFile()
非常基本,并且仅限于根据包含通配符的文件名搜索条目。当你在寻找目录时,它更棘手:你必须使用FindFirstFileEx()
。函数文档中名为fSearchOp的参数应为FindExSearchLimitToDirectories
数据以WIN32_FIND_DATA结构返回,您可以在其中阅读cFileName
。顺便说一句,尽量避免不惜任何代价的硬编码长度,如255,而是更喜欢众所周知的常量(这里是windows特定的MAX_PATH)。
最后,在循环时,您可以使用自己的基于C ++标准的复制功能或使用特定于Windows的CopyFile()
最后评论
这种体操一点都不便携。如果您想在Windows之外的其他平台上使用您的代码,则必须使用完全不同的API,例如dirent.h用于unix / linux和co。这就是为什么,对于这种特殊类型的工作,像boost这样的第三方库非常有用。如果你有时间,请在这里查看带有boost的directory iteration教程,并与基于Windows的代码进行比较。