最近在寫檔案操作的功能, 就是選擇一個檔案然後做複製或刪除的動作.
以下是選擇檔案的部份程式碼:
wchar_t fileName[256];
OPENFILENAME opf;
ZeroMemory(&opf, sizeof(opf));
opf.hwndOwner = 0;
opf.lpstrFilter = L"All Files(*.*)\0\*.*\0\0";
//opf.lpstrFilter = L"JPG Files\0*.jpg\0BMP Files\0*.bmp\0PNG Files\0*.png\0\0";
opf.nFilterIndex = 1;
opf.lpstrFile = fileName;
opf.lpstrFile[0] = L'\0';
opf.nMaxFile = sizeof(fileName);
opf.lpstrFileTitle = 0;
opf.nMaxFileTitle = 0;
opf.lpstrInitialDir = L"C:\\";
opf.lpstrTitle = L"select file";
opf.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
opf.lStructSize = sizeof(opf);
if(GetOpenFileName(&opf)
{
do something...
}
而複製檔案就使用 CopyFile(srcFile, dstFile, true), 刪除則是 DeleteFile(file).
MSDN有範例, 該頁面還有其他功能, 如選擇顏色等, 連結如下:
http://msdn.microsoft.com/en-us/library/ms646829
2011年3月31日 星期四
2011年3月14日 星期一
GetLastError in MSDN
以下網址即可找到錯誤訊息.
http://msdn.microsoft.com/en-us/library/ms681381
以下是 MSDN
void ErrorExit(LPTSTR lpszFunction)
{
// Retrieve the system error message for the last-error code
LPVOID lpMsgBuf;
LPVOID lpDisplayBuf;
DWORD dw = GetLastError();
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
dw,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL );
// Display the error message and exit the process
lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT,
(lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40) * sizeof(TCHAR));
StringCchPrintf((LPTSTR)lpDisplayBuf,
LocalSize(lpDisplayBuf) / sizeof(TCHAR),
TEXT("%s failed with error %d: %s"),
lpszFunction, dw, lpMsgBuf);
MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK);
LocalFree(lpMsgBuf);
LocalFree(lpDisplayBuf);
ExitProcess(dw);
}
void main()
{
// Generate an error
if(!GetProcessId(NULL))
ErrorExit(TEXT("GetProcessId"));
}
http://msdn.microsoft.com/en-us/library/ms681381
以下是 MSDN
void ErrorExit(LPTSTR lpszFunction)
{
// Retrieve the system error message for the last-error code
LPVOID lpMsgBuf;
LPVOID lpDisplayBuf;
DWORD dw = GetLastError();
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
dw,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL );
// Display the error message and exit the process
lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT,
(lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40) * sizeof(TCHAR));
StringCchPrintf((LPTSTR)lpDisplayBuf,
LocalSize(lpDisplayBuf) / sizeof(TCHAR),
TEXT("%s failed with error %d: %s"),
lpszFunction, dw, lpMsgBuf);
MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK);
LocalFree(lpMsgBuf);
LocalFree(lpDisplayBuf);
ExitProcess(dw);
}
void main()
{
// Generate an error
if(!GetProcessId(NULL))
ErrorExit(TEXT("GetProcessId"));
}
訂閱:
文章 (Atom)