【发布时间】:2014-09-17 12:30:19
【问题描述】:
我必须创建控制台应用程序,它会在目录中查找所有 .txt 文件,并将它们复制为同一目录中的 .copytxt 格式。程序从 CopyFile 函数返回错误代码 2。我真的不知道问题出在哪里。我尝试使用此参考:http://msdn.microsoft.com/en-us/library/windows/desktop/aa365522(v=vs.85).aspx
这是我的代码:
#include "stdafx.h"
#include "windows.h"
#define SOURCE_PATH _T(R"(C:\Users\XXXXX\Documents\4.semester\PB173\Ukol1\text\)")
int _tmain(int argc, _TCHAR* argv[])
{
WIN32_FIND_DATA findData;
HANDLE findHandle;
BOOL fFinished = FALSE;
TCHAR oldPath[MAX_PATH];
TCHAR newPath[MAX_PATH];
DWORD attrs;
_tcscpy_s(oldPath, _T("\\?\)"));
_tcscpy_s(oldPath, SOURCE_PATH);
_tcscat_s(oldPath, _T("*.txt"));
_tprintf(_T("%s\n"), oldPath);
findHandle = FindFirstFile(oldPath, &findData);
if (findHandle != INVALID_HANDLE_VALUE)
{
_tprintf(_T("The first file found is %s\n"), findData.cFileName);
while (!fFinished)
{
_tcscpy_s(newPath, _T("\\?\)"));
_tcscpy_s(newPath, SOURCE_PATH);
TCHAR* pChar;
TCHAR* savePtr;
pChar = _tcstok_s(findData.cFileName, _T("."), &savePtr);
_tcscat_s(newPath, pChar);
_tcscat_s(newPath, _T(".copytxt"));
_tprintf(_T("%s\n"), newPath);
//StringCchPrintf(newPath, sizeof(newPath) / sizeof(newPath[0]), TEXT("%s\\%s"), oldPath, findData.cFileName);
if (CopyFile(findData.cFileName, newPath, FALSE))
{
attrs = GetFileAttributes(findData.cFileName);
if (attrs == INVALID_FILE_ATTRIBUTES) break;
SetFileAttributes(newPath, attrs);
_tprintf(_T("File %s copied successfully.\n"), findData.cFileName);
}
else
{
_tprintf(_T("Could not copy file %s.\n"), findData.cFileName);
_tprintf(_T("%d\n"), GetLastError());
break;
}
if (!FindNextFile(findHandle, &findData))
{
if (GetLastError() == ERROR_NO_MORE_FILES)
{
_tprintf(_T("All files *.txt were copied.\n"));
fFinished = TRUE;
}
else
{
_tprintf(_T("Could not find next file.\n"));
break;
}
}
}
FindClose(findHandle);
}
else
{
_tprintf(TEXT("FindFirstFile failed (%d)\n"), GetLastError());
}
return 0;
}
【问题讨论】:
-
如果您看到this reference,则错误
2是ERROR_FILE_NOT_FOUND。 -
2 是 ERROR_FILE_NOT_FOUND。 (来自 WinError.h),findData.cFileName 和 newPath 的值是多少?
-
IIRC,cFileName 只是文件名。如果您不使用源路径添加它,则复制文件将失败:(
-
..事实上,我会将其提升为答案:)
-
为什么它在我在这里链接的参考文献中有效?
标签: c++ c windows winapi file-io