utility.cpp
字号:
}
s = new char[strlen(homeDir) + strlen(fadir) + 1];
strcpy(s, homeDir);
strcat(s, fadir);
return s;
}
#endif
const char* protocol = "file://";
Error FilePathToURL(const char* path, char* url, uint32* length)
{
Error result = kError_InvalidParam;
assert(path);
assert(url);
assert(length);
if(path && url && length)
{
result = kError_BufferTooSmall;
int32 extra = 0;
#ifdef WIN32
// is this relative or network path
if(path[0] == '\\' && path[1] != '\\')
{
extra = 2;
}
#endif
if(*length >= strlen(path) + strlen(protocol) + 1 + extra)
{
strcpy(url, protocol);
#ifdef WIN32
if(extra)
{
int32 drive = _getdrive();
url[7] = drive + 'A' - 1;
url[8] = '|';
url[9] = 0x00;
}
#endif
strcat(url, path);
#ifdef WIN32
if(strlen(path) > 1 && path[1] == ':')
{
url[8] = '|';
}
for(int32 index = strlen(url) - 1; index >=0; index--)
{
if(url[index] == '\\')
url[index] = '/';
}
#endif
result = kError_NoErr;
}
*length = strlen(path) + strlen(protocol) + 1 + extra;
}
return result;
}
Error URLToFilePath(const char* url, char* path, uint32* length)
{
Error result = kError_InvalidParam;
assert(path);
assert(url);
assert(length);
if(path && url && length && !strncasecmp(url, protocol, strlen(protocol)))
{
result = kError_BufferTooSmall;
if(*length >= strlen(url) - strlen(protocol) + 1)
{
strcpy(path, url + strlen(protocol));
#ifdef WIN32
if(strlen(path) > 1 && path[1] == '|')
{
path[1] = ':';
}
for(int32 index = strlen(path) - 1; index >=0; index--)
{
if(path[index] == '/')
path[index] = '\\';
}
#endif
result = kError_NoErr;
}
*length = strlen(url) - strlen(protocol) + 1;
}
return result;
}
void ToUpper(char *s)
{
char *p;
for(p = s; *p != '\0'; p++)
*p = toupper(*p);
}
void ToLower(char *s)
{
char *p;
for(p = s; *p != '\0'; p++)
*p = tolower(*p);
}
#ifndef WIN32
void LaunchBrowser(char* url)
{
char url2[_MAX_PATH];
char lockfile[255];
int lockfile_fd;
struct stat sb;
char *home, *browser;
browser = "netscape";
sprintf(url2, "openURL(%s)", url);
if (!strcmp(browser, "netscape"))
{
home = getenv("HOME");
if (!home)
home = "/";
sprintf(lockfile,"%.200s/.netscape/lock",home);
if (fork() > 0)
return;
if ((lockfile_fd = lstat(lockfile, &sb))!=-1)
{
execlp("netscape", "netscape", "-remote", url2, NULL);
}
else
{
execlp("netscape", "netscape", url, NULL);
}
perror("Could not launch netscape");
_exit(0);
}
else
{
if (fork() > 0)
return;
char *command = new char[strlen(browser) + strlen(url) + 10];
sprintf(command, "%s \"%s\"", browser, url);
system(command);
delete [] command;
_exit(0);
}
}
#endif
#ifdef WIN32
void FindMusicFiles(const char* rootPath,
vector<string>& urls,
vector<string>& queries)
{
HANDLE findFileHandle = NULL;
WIN32_FIND_DATA findData;
string findPath;
string::size_type pos;
vector<string>::iterator query = queries.begin();
// first run each query on this directory
for(;query != queries.end(); query++)
{
findPath = rootPath;
findPath += DIR_MARKER_STR;
pos = findPath.size();
findPath += *query;
findFileHandle = FindFirstFile(findPath.c_str(), &findData);
if(findFileHandle != INVALID_HANDLE_VALUE)
{
do
{
findPath.replace(pos,
findPath.size() - pos,
findData.cFileName);
char url[MAX_PATH + 8];
uint32 length = sizeof(url);
FilePathToURL(findPath.c_str(), url, &length);
urls.push_back(url);
}while(FindNextFile(findFileHandle, &findData));
FindClose(findFileHandle);
}
}
// next find all the directories in this directory and
// and run the queries on them
findPath.replace(pos,
findPath.size() - pos,
"*.*");
findFileHandle = FindFirstFile(findPath.c_str(), &findData);
if(findFileHandle != INVALID_HANDLE_VALUE)
{
do
{
if(strcmp(findData.cFileName, ".") &&
strcmp(findData.cFileName, ".."))
{
findPath.replace(pos,
findPath.size() - pos,
findData.cFileName);
struct stat st;
stat(findPath.c_str(), &st);
if(st.st_mode & _S_IFDIR)
{
FindMusicFiles(findPath.c_str(),
urls,
queries);
}
}
}while(FindNextFile(findFileHandle, &findData));
FindClose(findFileHandle);
}
}
bool ResolveLink(string& path)
{
bool result = false;
HRESULT hres = NULL;
hres = CoInitialize(NULL);
if(SUCCEEDED(hres))
{
IShellLink* psl = NULL;
// Get a pointer to the IShellLink interface
hres = CoCreateInstance(CLSID_ShellLink,
NULL,
CLSCTX_INPROC_SERVER,
IID_IShellLink,
(void**)&psl);
if(SUCCEEDED(hres))
{
IPersistFile* ppf;
// Get a pointer to the IPersistFile interface
hres = psl->QueryInterface(IID_IPersistFile, (void**)&ppf);
if(SUCCEEDED(hres))
{
WORD wsz[MAX_PATH];
// Ensure string is UNICODE
MultiByteToWideChar(CP_ACP,
0,
path.c_str(),
-1,
wsz,
MAX_PATH);
// Load Shortcut
hres = ppf->Load(wsz, STGM_READ);
if(SUCCEEDED(hres))
{
// Resolve the link
hres = psl->Resolve(NULL, SLR_ANY_MATCH|SLR_NO_UI);
if(SUCCEEDED(hres))
{
WIN32_FIND_DATA wfd;
char buf[MAX_PATH];
// Resolve the link
hres = psl->GetPath(buf,sizeof(buf),&wfd, 0);
if(SUCCEEDED(hres))
{
path = buf;
result = true;
}
}
}
// Release the IPersist Interface
ppf->Release();
}
// Release the IShellLink Interface
psl->Release();
}
CoUninitialize();
}
return result;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -