📄 cnutility.cpp
字号:
//---------------------------------------------------------------------------
#pragma hdrstop
#include "CNUtility.h"
#include "CNRegistry.h"
#include "CNStringList.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
TCNString CN_IntToHex(int Value, int Digits)
{
TCNString sTmp;
char buf[10];
sprintf(buf,"%X",Value);
sTmp = buf;
for(register i = 0; i < Digits; i++)
{
if( sTmp.Length() < Digits) sTmp = "0" + sTmp;
}
return sTmp;
}
TCNString CN_Trim(const TCNString S)
{
int i,j;
TCNString Tmp;
j = S.Length() -1;
i = 0;
while ((i <= j) && (S[i] <= ' ')) i++;
if( i > j)
{
Tmp = "";
}
else
{
while( S[j] <= ' ') j--;
Tmp = S.SubString(i,(j-i) + 1);
}
return Tmp;
}
TCNString CN_TrimLeft(const TCNString S)
{
int I, L;
TCNString sTmp;
L = S.Length() - 1;
I = 0;
while ((I <= L) && (S[I] <= ' ')) I++;
if( I > L )
{
sTmp = "";
}
else
{
sTmp = S.SubString(I, L-I + 1);
}
return sTmp;
}
TCNString CN_TrimRight(const TCNString S)
{
int I;
TCNString sTmp;
I = S.Length() - 1;
while ((I >= 0) && (S[I] <= ' ')) I--;
if( I < 0)
{
sTmp = "";
}
else
{
sTmp = S.SubString(0,I + 1);
}
return sTmp;
}
TCNString CN_IntToStr(int Value)
{
TCNString sTmp;
char buf[32];
itoa(Value,buf,10);
sTmp = buf;
return sTmp;
}
int CN_StrToInt(const TCNString S)
{
return atoi(S.c_str());
}
int CN_StrToIntDef(const TCNString S, int Default)
{
char c;
TCNString sTmp;
int Value = 0;
int n;
if( S.IsEmpty()) return Default;
sTmp = S;
if( (sTmp.Pos("0x") != -1) || (sTmp.Pos("0X") != -1) )
{
sTmp = S.SubString(2,S.Length() - 2);
sTmp = sTmp.UpperCase();
for( register i = 0; i < sTmp.Length(); i++)
{
c = sTmp[i];
if( c >= '0' && c <= '9')
{
n = c - '0';
}
else if( c >= 'A' && c <= 'F')
{
n = c - 'A' + 10;
}
else
{
n = 0;
}
Value = (Value << 4) + n;
}
}
else
{
Value = CN_StrToInt(S);
}
return Value;
}
TCNString CN_GetLocalIPAddress(void)
{
TCNString strIP;
struct hostent *p;
char hostname[ 80 ];
gethostname(hostname,80);
p = gethostbyname(hostname);
strIP = inet_ntoa( *((in_addr *)p->h_addr) );
return strIP;
}
TCNString CN_GetLocalHostName(void)
{
char hostname[ 80 ];
gethostname(hostname,80);
return TCNString(hostname);
}
TCNString CN_AdjustPath(TCNString &Path)
{
Path = Path.Trim();
if( Path[Path.Length()] != '\\') Path += "\\";
return Path;
}
TCNString SPACE(TCNString Str, int n)
{
TCNString Tmp = "";
if( Str.Length() < n)
{
n = n - Str.Length() -1;
for(register i = 0; i < n; i ++)
{
Tmp += ' ';
}
}
Tmp += ' ';
return Tmp;
}
TCNString CN_GetFileAttr(DWORD FileAttr)
{
TCNString Attr = "";
if( (FileAttr & FILE_ATTRIBUTE_READONLY) == FILE_ATTRIBUTE_READONLY) Attr = Attr + "R";
if( (FileAttr & FILE_ATTRIBUTE_ARCHIVE) == FILE_ATTRIBUTE_ARCHIVE) Attr = Attr + "A";
if( (FileAttr & FILE_ATTRIBUTE_SYSTEM) == FILE_ATTRIBUTE_SYSTEM) Attr = Attr + "S";
if( (FileAttr & FILE_ATTRIBUTE_HIDDEN) == FILE_ATTRIBUTE_HIDDEN) Attr = Attr + "H";
if( (FileAttr & FILE_ATTRIBUTE_DIRECTORY)== FILE_ATTRIBUTE_DIRECTORY)Attr = Attr + "D";
return Attr;
}
DWORD CN_GetFileAttr(TCNString FAttr)
{
//TODO: Add your source code here
DWORD Attr = 0;
if( FAttr.Pos('D') > 0) Attr |= FILE_ATTRIBUTE_DIRECTORY;
if( FAttr.Pos('H') > 0) Attr |= FILE_ATTRIBUTE_HIDDEN;
if( FAttr.Pos('S') > 0) Attr |= FILE_ATTRIBUTE_SYSTEM;
if( FAttr.Pos('A') > 0) Attr |= FILE_ATTRIBUTE_ARCHIVE;
if( FAttr.Pos('R') > 0) Attr |= FILE_ATTRIBUTE_READONLY;
return Attr;
}
TCNString CN_SplitterText(TCNString * Text,char spChar)
{
//TODO: Add your source code here
TCNString Result = "";
*Text = Text->Trim();
register char *s = Text->c_str();
while(*s )
{
if( *s == spChar) { s ++; break; }
Result += *s ++;
}
*Text = s;
return Result;
}
bool CN_IsIPAddress( TCNString ss)
{
TCNString s,s1;
int ii,p;
s1 = ss;
for( ii = 1 ; ii <= 3; ii++)
{
p = s1.Pos('.');
if( p == 0) return FALSE;
s = s1.SubString(0, p);
s1= s1.SubString(p + 1, s1.Length() - p -1);
p = CN_StrToIntDef(s, -1);
if( p < 0 || p > 255) return FALSE;
}
p = CN_StrToIntDef( s1 , -1);
if( p < 0 || p > 255) return FALSE;
return TRUE;
}
BOOL CN_CreateDir(TCNString Dir)
{
SECURITY_ATTRIBUTES Attributes;
Attributes.nLength = sizeof(SECURITY_ATTRIBUTES);
Attributes.lpSecurityDescriptor = NULL;
Attributes.bInheritHandle = TRUE;
return CreateDirectory(Dir.c_str(),&Attributes);
}
BOOL CN_RemoveDir(TCNString Dir)
{
return RemoveDirectory(Dir.c_str());
}
BOOL CN_RenameFile(TCNString SourceFile,TCNString DestFile)
{
return MoveFile(SourceFile.c_str(),DestFile.c_str());
}
TCNString CN_ExtractFilePath(TCNString FileName)
{
TCNString sTmp;
register i;
for(i = FileName.Length()-1; i > 0; i --)
{
if( FileName[i] == '\\') break;
}
sTmp = FileName.SubString(0,i);
return sTmp;
}
TCNString CN_ExtractFileName(TCNString FullFileName)
{
TCNString sTmp;
register i;
for(i = FullFileName.Length()-1; i > 0; i --)
{
if( FullFileName[i] == '\\') break;
}
sTmp = FullFileName.SubString(i + 1,FullFileName.Length() - i - 1);
return sTmp;
}
TCNString CN_DeleteFile(TCNString FileName)
{
HANDLE h;
WIN32_FIND_DATA r;
bool Found = false;
TCNString Path = CN_ExtractFilePath(FileName);
CN_AdjustPath(Path);
TCNString CanNotDelFile = "";
h = FindFirstFile(FileName.c_str(),&r);
if( h != INVALID_HANDLE_VALUE) Found = true;
while(Found )
{
if( (r.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY)
{
FileName = Path + r.cFileName;
FileName = FileName.Trim();
SetFileAttributes(FileName.c_str(),0x00000020); //去掉只读属性
if(!DeleteFile(FileName.c_str()))
{
CanNotDelFile = CanNotDelFile + r.cFileName + ",";
}
}
Found = FindNextFile(h,&r);
}
FindClose(h);
return CanNotDelFile;
}
void CN_DelAllFileInPath(TCNString Path)
{
//TODO: Add your source code here
HANDLE h;
WIN32_FIND_DATA r;
bool Found = false;
CN_AdjustPath(Path);
h = FindFirstFile(TCNString(Path + "*.*").c_str(),&r);
if( h != INVALID_HANDLE_VALUE) Found = true;
while(Found )
{
if( ((r.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) &&
(strcmp(r.cFileName,".") != 0) &&
(strcmp(r.cFileName,"..") != 0))
{
CN_DelAllFileInPath(Path + r.cFileName);
}
else if((strcmp(r.cFileName,".") != 0) &&
(strcmp(r.cFileName,"..") != 0))
{
SetFileAttributes(TCNString(Path + r.cFileName).c_str(),0x00000020); //去掉只读属性
DeleteFile(TCNString(Path + r.cFileName).c_str()); //删除文件
}
Found = FindNextFile(h,&r);
}
SetFileAttributes(Path.c_str(),0x00000020); //去掉只读属性
RemoveDirectory(Path.c_str());
FindClose(h);
}
int CN_GetFileSize( TCNString FileName)
{
HANDLE h;
WIN32_FIND_DATA r;
bool Found = false;
DWORD FileSize = 0;
h = FindFirstFile(FileName.c_str(),&r);
if( h != INVALID_HANDLE_VALUE) Found = true;
while(Found )
{
FileSize = (r.nFileSizeHigh << sizeof(DWORD)) + r.nFileSizeLow;
}
FindClose(h);
return FileSize;
}
bool CN_IsFolder(TCNString CurPath,TCNString FileName)
{
HANDLE h;
WIN32_FIND_DATA r;
h = FindFirstFile(FileName.c_str(),&r);
if( h == INVALID_HANDLE_VALUE)
{
FindClose(h);
return false;
}
FindClose(h);
return ( (r.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY);
}
bool CN_IsInvalidateFileName(TCNString FileName)
{
if( FileName.Pos('/') > 0 || FileName.Pos('\\') > 0 || FileName.Pos(':') > 0 ||
FileName.Pos('*') > 0 || FileName.Pos('?') > 0 || FileName.Pos('"') > 0 ||
FileName.Pos('<') > 0 || FileName.Pos('>') > 0 || FileName.Pos('|') > 0 )
{
return TRUE;
}
return FALSE;
}
bool CN_ExecFile(TCNString FileName)
{
int Err;
bool Result ;
Err = WinExec(FileName.c_str(),TRUE);
switch( Err)
{
case 0:
case ERROR_BAD_FORMAT:
case ERROR_FILE_NOT_FOUND:
case ERROR_PATH_NOT_FOUND:Result = FALSE;break;
default: Result = TRUE; break;
}
return Result;
}
BOOL CN_DirectoryExists(TCNString Name)
{
long Attr = GetFileAttributes(Name.c_str());
return (Attr != -1) && ( (Attr & FILE_ATTRIBUTE_DIRECTORY) != 0);
}
BOOL CN_FileExists(TCNString Name)
{
WIN32_FIND_DATA r;
return (FindFirstFile(Name.c_str(),&r) != INVALID_HANDLE_VALUE);
}
//从磁盘目录导入
void CN_CopyDirTo(TCNString FromDirName,TCNString ToDirName, bool Flag)
{
//TODO: Add your source code here
HANDLE h;
WIN32_FIND_DATA r;
bool Found = FALSE;
CN_AdjustPath(FromDirName);
CN_AdjustPath(ToDirName);
h = FindFirstFile(TCNString(FromDirName + "*.*").c_str(),&r);
if( h != INVALID_HANDLE_VALUE) Found = TRUE;
while(Found )
{
if( (r.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY) &&
(strcmp(r.cFileName,".") != 0) &&
(strcmp(r.cFileName,"..") != 0))
{
if(!CN_DirectoryExists(ToDirName + r.cFileName))//如果目标目录不存在
{
CreateDirectory( TCNString(ToDirName + r.cFileName).c_str(),NULL); //创建目录
}
CN_CopyDirTo( FromDirName + r.cFileName ,ToDirName + r.cFileName , Flag);
}
else if((strcmp(r.cFileName,".") != 0) &&
(strcmp(r.cFileName,"..") != 0))
{
if( Flag ) //如果是移动文件方式
{
MoveFile(TCNString(FromDirName + r.cFileName).c_str(),
TCNString(ToDirName + r.cFileName).c_str());
}
else
{
CopyFile(TCNString(FromDirName + r.cFileName).c_str(),
TCNString(ToDirName + r.cFileName).c_str(),FALSE);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -