有時候電腦會出現一些莫名的檔案,用各種方法都無法刪除,用右鍵看了內容:
大小:0個位元組 磁碟大小:0個位元組
建立,修改,存取時間:無
屬性:不是唯讀也不是隱藏
如果移動此檔案到別的地方系統會顯示:無法移動
檔案:無法讀取來源檔案或磁碟
如果刪除檔案的話系統會顯示:無法刪除檔案:無法讀取來源檔案或磁碟
雖然是不影響電腦運作,但是就是很礙眼,後來找到了一個免費的工具可以快速刪掉這種檔案或資料夾。
程式名稱:DelinvFil
下載網址:http://www.purgeie.com/delinv/
2008年12月23日 星期二
無法刪除 檔案:無法讀取來源檔案或磁碟
2008年12月10日 星期三
FindWindow
有時候我們必須判斷某個應用程式是否還在運作,如果存在的話執行A動作,不在的話執行B動作,這時候就要用到FindWindow來達成:
hwnd = ::FindWindow(NULL, "WindowTitle");
if (hwnd)
Run_A();
else
Run_B();
"WindowTitle"指的就是那個應用程式的名稱,也就是該程式的title。如果我們要把找到的應用程式關掉的話,可以這麼作:
hwnd = ::FindWindow(NULL, "WindowTitle");
::PostMessage(hwnd, WM_CLOSE, 0, 0);
有的CMD的執行程式,必須要輸入某些字才可以結束,就可以使用下列方式:
CString Sendmsg = "shutdown";
int i;
char tempStr[2] = {0};
for (i=0 ; i < Sendmsg . GetLength ( ) ; i++ )
{
strcpy(tempStr,(LPCTSTR) Sendmsg .Mid(i,1));
::SendMessage(hwnd, WM_CHAR, (WPARAM)tempStr[0], (LPARAM)0);
}
strcpy(tempStr,"\r");
::SendMessage(hwnd, WM_CHAR, (WPARAM)tempStr[0], (LPARAM)0);
2008年12月8日 星期一
二進制存檔
好久沒有新增文章了,前一陣子渡過一段暗無天日的忙碌生活(瞎忙?),今天難得有時間好好的改一下擱置已久的問題,這次所遇到的是要把一個二進制的bin檔輸出成十六進制格式的文字檔案,這種格式就會像是我們用UltraEdit開啟檔案後再選擇十六進制的模式。這個小動作我想了很久,一值在找VC6是否有可以簡單完成的API,找了好久後我放棄了(應該是沒有),剛好翻了之前在大陸買的"Visual C++開發經驗技巧寶典",找到了一個類似的範例,解決了這次的問題 :)
DWORD filelen= 0, readlen= 0, pos = 0;
CString strbin;
BYTE buf[16];
CFile f;
f.Open("123.bin",CFile::modeRead);
filelen = f.GetLength();
FILE *fp;
fp=fopen("123.txt", "a");
while(1)
{
readlen = f.Read(buf,16);
CString strtemp;
for(int i = 0 ; i <16; i ++)
{
strtemp.Format("%02X",buf[i]);
if(i == 15)
fprintf(fp, "%s;\n", strtemp);
else
fprintf(fp, "%s ", strtemp);
}
pos+=readlen;
if(pos >= filelen)
break;
}
fclose(fp);
輸出的格式如下圖:
2008年10月22日 星期三
Linux 字串取代
Linux中有個字串取代的命令:sed,蠻好用的,正好解決的工作上的一些小問題。
在 file裡的第三行後面加入一行xxx
sed 3axxx file
在 file裡的第三行前面加入一行xxx
sed 3ixxx file
將 file裡的第三行修改為 xxx
sed 3cxxx file
將 file裡的 old-string改為 new-string
sed s/old-string/new-string/g file
2008年10月1日 星期三
移除windows的^M換行符號
我好想把標題打成整死人不償命的換行符號,因為這應該是一個很小的問題,但是卻困擾了我好久....Orz
最近遇到一個問題就是我要把一個windows底下產生的文字檔案傳到測試物的系統中(linux),但是在程式所產生的檔案丟到linux後才發現在每一行後面都會多一個^M的換行符號,這樣會造成linux系統無法正常使用這個檔案。
查了一下才發現,原來是這兩個系統的換行符號不同所造成,所以必須經過轉換,於是馬上跟google大神與同事求救,終於找到解決的方法了:
方法一:dos2unix file.txt
方法二:cat old_file.txt | tr -d '\r' > new_file.txt
2008年9月24日 星期三
fatal error LNK1120: x unresolved externals
這兩天遇到一個問題打轉了很久,要載入一個dll的function的時候,compile會出現fatal error LNK1120
印象中,好像也遇過這個問題,但是卻一時又忘了當時怎麼解決的,請同事幫我看也不太確定是什麼原因,從靜態載入改為動態載入還是一樣 囧...
後來還是請教google大神,終於找到解法了,在微軟的msdn中有提到一段:
If you are using C++, make sure to use extern “C” when calling a C function from a C++ program. By using extern “C” you force the use of the C naming convention. Be aware of compiler switches like /Tp or /Tc that force a file to be compiled as a C (/Tc) or C++ (/Tp) file no matter what the filename extension, or you may get different function names than you expect.
於是把原本include進來的h檔改成
extern "C"
{
#include "TEST.h"
}
這樣終於解決這次遇到的問題了 Orz
參考網址
http://support.microsoft.com/default.aspx?scid=kb;en-us;815650
http://msdn.microsoft.com/en-us/library/aa234493.aspx
2008年9月10日 星期三
Com Receive Function
除了工作之外,大學的某個實驗課也寫過簡單的rs232通訊程式,後來因為USB與LAN等等介面的發展成熟,已經越來越少電子產品有console port了,甚至有些新的主機板上面已經沒有這個介面了...Orz。
但是在產品測試的階段,卻常常還是需要用到這個介面,我想大概是因為console介面的特性:簡單,設定少,問題比較單純(至少是不用裝driver或設定ip)。
最近在進行的一個案子,就是需要經由console來進行測試,在之前我比較少使用這種方式,所以感覺寫起來並不是那麼的friendly....
今天與同事討論了一下,發現我的Com port接收的動作不太理想,參考同事的code修改了一下:
原本的function:
bool COM_Recv(int com, char *resp, int timeout)
{
int i, len=0;
char buf[MAX_STRLEN]="";
for(i=0; i
break;
Sleep(100);
}
if(len>0)
{
memset(resp, 0, sizeof(resp));
sio_read(com, buf, sizeof(buf));
sprintf(resp, "%s", buf);
return true;
}
else
return false;
}
修改成:
bool COM_Recv(int com, char *resp, int timeout)
{
int i, len = 0;
char buf[500];
memset(buf, 0, sizeof(buf));
resp[0]=0;
for(i=0; i
{
sio_read(com, buf, sizeof(buf));
strcat(resp, buf);
if (strstr(resp,"->") != NULL)
return true;
}
Sleep(100);
}
return false;
}