そのファイルの場所を返すプログラムを作りたいのですが
うまくいきません。
以下に僕が書いたソースコードを提示します。
このソースコードを直してほしいです。
まだWindowsプログラミングはやり始めたばかりなので、
ひどいソースコードです。
よろしくお願いします。
#define _CRT_SECURE_NO_DEPRECATE 1 // VisualC++2005 での警告抑制
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
static BOOL SearchFullPath(LPCTSTR pInFolder, LPCTSTR pTergetFile, LPTSTR pFullPath);
//LPCTSTR==const TCHAR *
//LPCTSTR==const TCHAR *
//LPTSTR==const CHAR *
int main(void)
{
TCHAR szFileName[MAX_PATH] = ("");//TCHAR==ASCII&UNICODE char
TCHAR szFullPath[MAX_PATH] = ("");//TCHAR==ASCII&UNICODE char
puts("ファイル名を入れてください:"); scanf_s("%s", szFileName, sizeof(szFileName) / sizeof(szFileName[0]));//sizeof==size
if (SearchFullPath("C:"), szFileName, szFullPath)
{
printf("%s", szFullPath);
}
return 0;
}
static BOOL SearchFullPath(LPCTSTR pInFolder, LPCTSTR pTergetFile, LPTSTR pFullPath)
//LPCTSTR==const TCHAR *
//LPCTSTR==const TCHAR *
//LPTSTR==const CHAR *
{
WIN32_FIND_DATA fd = {0};
HANDLE hFind = NULL;
TCHAR szSearchBuf[MAX_PATH];//TCHAR==ASCII&UNICODE char
BOOL bRet = FALSE;
if (!pInFolder || pInFolder[0] == '\0' || !pTergetFile || pTergetFile[0] == '\0' || !pFullPath)
{
return FALSE;
}
wsprintf(szSearchBuf, ("%s\\*.*"), pInFolder);//szSearchBuf=pInFolder japanese OK
hFind = FindFirstFile(szSearchBuf, &fd);
if (hFind != INVALID_HANDLE_VALUE)
{
do
{
if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if (lstrcmp(fd.cFileName, (".")) != 0 && lstrcmp(fd.cFileName, ("..")) != 0)
{
// . でも .. でもなければ
wsprintf(szSearchBuf, ("%s\\%s"), pInFolder, fd.cFileName);//
if (SearchFullPath(szSearchBuf, pTergetFile, pFullPath))
{
bRet = TRUE;
break;
}
}
}
else
{
if (lstrcmpi(fd.cFileName, pTergetFile) == 0)
{
// hit!
wsprintf(pFullPath, ("%s\\%s"), pInFolder, fd.cFileName);
bRet = TRUE;
break;
}
}
}
while (FindNextFile(hFind, &fd)!= INVALID_HANDLE_VALUE);
FindClose(hFind);
}
else
{
puts("ファイルが見つかりませんでした。");
}
return bRet;
}