查了很多网页,有的说是要删除的文件存在打开的句柄未关掉。而我这种情况是在程序一开始DeleteFile删除某个文件就删不掉,报ERROR_ACCESS_DENIED的错,换成_unlink删也删不掉。
但我在同样的目录新建一个文本文件再DeleteFile此文本文件是可以删除的。
于是我怀疑是不是有钩子进程使坏,我将“QQ电脑管家”程序退出,结果就可以成功调用DeleteFile了。
也就是说,“QQ电脑管家”阻止了DeleteFile删除某些特定后缀的文件,比如jpg后缀的文件。
人,技术,生活。
查了很多网页,有的说是要删除的文件存在打开的句柄未关掉。而我这种情况是在程序一开始DeleteFile删除某个文件就删不掉,报ERROR_ACCESS_DENIED的错,换成_unlink删也删不掉。
但我在同样的目录新建一个文本文件再DeleteFile此文本文件是可以删除的。
于是我怀疑是不是有钩子进程使坏,我将“QQ电脑管家”程序退出,结果就可以成功调用DeleteFile了。
也就是说,“QQ电脑管家”阻止了DeleteFile删除某些特定后缀的文件,比如jpg后缀的文件。
正确写法是中间要加个ScreenToClient:
1 2 3 4 | CRect rect; listRecord_.GetWindowRect(&rect); ScreenToClient(&rect); listRecord_.MoveWindow(&rect); |
可能原因是栈空间用光了,需要仔细检查上下文中,看有没有存在占很大空间的局部变量。有的话,改为堆上分配这些变量。
ffmpeg -i input.ps -c copy -f mp4 output.mp4
创建:
mklink /H "hard link name" "target file"
fsutil.exe hardlink create "hard link name" "target file"
查看:
fsutil.exe hardlink list "hard link name"
fsutil.exe hardlink list "target file"
出自:http://blog.nsfocus.net/shortcuthard-linkjunction-pointsymbolic-link/
有一个脚本/root/kill.sh:
1 2 3 4 5 | #!/bin/sh while [ 1 ]; do sudo kill -9 `pidof java` sleep 10 done |
在命令行执行很正确,能隔一段时间把所有的java进程都杀掉了。
但执行:
1 | nohup /root/kill.sh & |
现象就很奇怪了,有时候能杀掉所有java进程,有时候不干活,java进程依然存在,让人怀疑人生。
无意中打开nohup.out发现有输出:
sudo没有与之关联的会话。
于是,修改kill.sh,把kill之前的sudo去掉就正常了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | HBITMAP loadPictureFromFile(LPCTSTR szFile) { HANDLE hFile = CreateFile(szFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); if (INVALID_HANDLE_VALUE == hFile) return NULL; DWORD dwFileSize = GetFileSize(hFile, NULL); LPVOID pvData = NULL; HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize); pvData = GlobalLock(hGlobal); DWORD dwBytesRead = 0; BOOL bRead = ReadFile(hFile, pvData, dwFileSize, &dwBytesRead, NULL); GlobalUnlock(hGlobal); CloseHandle(hFile); LPSTREAM pStm = NULL; HRESULT hr = CreateStreamOnHGlobal(hGlobal, TRUE, &pStm); LPPICTURE gpPicture; hr = ::OleLoadPicture(pStm, dwFileSize, FALSE, IID_IPicture, (LPVOID *)&gpPicture); pStm->Release(); OLE_HANDLE picHandle; gpPicture->get_Handle(&picHandle); HDC hdc = ::CreateCompatibleDC(NULL); ::SelectObject(hdc, (HGDIOBJ)picHandle); HBITMAP hRet = (HBITMAP)::GetCurrentObject(hdc, OBJ_BITMAP); DeleteDC(hdc); // gpPicture->Release(); // 这里不能释放gpPicture,否则返回的hRet是野指针数据 return hRet; } |
打印第11行:
sed -n "11, 1p" /tmp/tmp.txt
或者
awk 'NR == 11 {print}' /tmp/tmp.txt
打印第3列:
awk '{print $3;}' /tmp/tmp.txt
打印总行数:
awk 'END {print NR}' /tmp/tmp.txt
这是我写的一款开源软件,主要用于安卓设备上的RTSP流获取及显示。更多信息,请参看:
原因是
正确示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | void SampleDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { int iMin = 0, iMax = 0; pScrollBar->GetScrollRange(&iMin, &iMax); // nPos = pScrollBar->GetScrollPos(); // 此处这句话一定不能有 switch (nSBCode) { case SB_THUMBTRACK: break; case SB_LINELEFT: nPos = pScrollBar->GetScrollPos(); // 此处这句话一定要有 nPos--; if (nPos < (UINT)iMin) nPos = 0; break; case SB_LINERIGHT: nPos = pScrollBar->GetScrollPos(); // 此处这句话一定要有 nPos++; if (nPos >= (UINT)iMax) nPos = iMax - 1; break; case SB_ENDSCROLL: nPos = pScrollBar->GetScrollPos(); // 此处这句话一定要有 break; default: break; } pScrollBar->SetScrollPos(nPos, 1); // 此处这句话也一定要有 // Todo real work with nPos. CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar); } |