Example #1
0
int CFileHelper::getFileState(const char*szfilePath)
{
    int nInfo = 0;
#ifdef SCUT_WIN32
    WIN32_FILE_ATTRIBUTE_DATA info;
    if (GetFileAttributesExA(szfilePath, GetFileExInfoStandard, &info) != 0)
    {
        nInfo =  info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
    }
    else
    {
        nInfo = -1;
    }

#else
    struct stat st;
    if (stat(szfilePath, &st) == 0) {
        nInfo = S_ISDIR(st.st_mode);
    }
    else
    {
        nInfo = -1;
    }

#endif
    return nInfo;
}
Example #2
0
bool getFileInfo(const char *path, FileInfo *fileInfo)
{
	// TODO: Expand relative paths?
	fileInfo->fullName = path;

#ifdef _WIN32
	fileInfo->size = 0;
	WIN32_FILE_ATTRIBUTE_DATA attrs;
	if (GetFileAttributesExA(path, GetFileExInfoStandard, &attrs)) {
		fileInfo->size = (uint64_t)attrs.nFileSizeLow | ((uint64_t)attrs.nFileSizeHigh << 32);
	}
	fileInfo->isDirectory = (attrs.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0;
	fileInfo->isWritable = (attrs.dwFileAttributes & FILE_ATTRIBUTE_READONLY) == 0;
#else
	struct stat64 file_info;

	std::string copy(path);
	stripTailDirSlashes(copy);

	int result = stat64(copy.c_str(), &file_info);

	if (result < 0) {
		WLOG("IsDirectory: stat failed on %s", path);
		return false;
	}

	fileInfo->isDirectory = S_ISDIR(file_info.st_mode);
	fileInfo->isWritable = false;
	fileInfo->size = file_info.st_size;
	// HACK: approximation
	if (file_info.st_mode & 0200)
		fileInfo->isWritable = true;
#endif
	return true;
}
Example #3
0
bool file_utils::is_older_than(const char *pSrcFilename, const char *pDstFilename)
{
    WIN32_FILE_ATTRIBUTE_DATA src_file_attribs;
    const BOOL src_file_exists = GetFileAttributesExA(pSrcFilename, GetFileExInfoStandard, &src_file_attribs);

    WIN32_FILE_ATTRIBUTE_DATA dst_file_attribs;
    const BOOL dest_file_exists = GetFileAttributesExA(pDstFilename, GetFileExInfoStandard, &dst_file_attribs);

    if ((dest_file_exists) && (src_file_exists))
    {
        LONG timeComp = CompareFileTime(&src_file_attribs.ftLastWriteTime, &dst_file_attribs.ftLastWriteTime);
        if (timeComp < 0)
            return true;
    }
    return false;
}
/*
==================
EGLExceptionHandler
==================
*/
static sint32 Sys_FileLength (const char *path)
{
	WIN32_FILE_ATTRIBUTE_DATA	fileData;

	if (GetFileAttributesExA (path, GetFileExInfoStandard, &fileData))
		return fileData.nFileSizeLow;

	return -1;
}
inline FILETIME Win32GetLastWriteTime(char *FileName) {
	FILETIME LastWriteTime = {};
	WIN32_FILE_ATTRIBUTE_DATA Data;

	if (GetFileAttributesExA(FileName, GetFileExInfoStandard, &Data)) {
		LastWriteTime = Data.ftLastWriteTime;
	}

	return(LastWriteTime);
}
Example #6
0
bool
FileSystem::getFileSize( string path_, File::Size& size_ )
{
    size_ = 0;
    WIN32_FILE_ATTRIBUTE_DATA data;
    if( !GetFileAttributesExA( path_.c_str(), GetFileExInfoStandard, (LPVOID)&data ))
        return true;
    size_ = ((File::Size)data.nFileSizeHigh << 32) | data.nFileSizeLow;
    return false;
}
Example #7
0
static FILETIME Win32GetLastWriteTime( char *filename ) {
	FILETIME result = { 0 };

	WIN32_FILE_ATTRIBUTE_DATA data;
	if ( GetFileAttributesExA( filename, GetFileExInfoStandard, &data ) ) {
		result = data.ftLastWriteTime;
	}

	return result;
}
Example #8
0
static __int64
file_size(LPCSTR lpcstrFileName)
{
    WIN32_FILE_ATTRIBUTE_DATA fad;
    if (!GetFileAttributesExA(lpcstrFileName, GetFileExInfoStandard, &fad))
        return -1;
    LARGE_INTEGER size;
    size.HighPart = fad.nFileSizeHigh;
    size.LowPart = fad.nFileSizeLow;
    return size.QuadPart;
}
    /*
     *  GetFileSize
     *      WinAPI-like function that gets the file size of @szPath
     */
    inline LONGLONG GetFileSize(LPCTSTR szPath)
    {
        WIN32_FILE_ATTRIBUTE_DATA fad; LARGE_INTEGER size;

        if(!GetFileAttributesExA(szPath, GetFileExInfoStandard, &fad))
                return 0;

        size.HighPart = fad.nFileSizeHigh;
        size.LowPart = fad.nFileSizeLow;
        return size.QuadPart;
    }
Example #10
0
size_t lw_file_size (const char * filename)
{
   WIN32_FILE_ATTRIBUTE_DATA info;
   LARGE_INTEGER size;

   if (!GetFileAttributesExA (filename, GetFileExInfoStandard, &info))
      return 0;

   size.LowPart = info.nFileSizeLow;
   size.HighPart = info.nFileSizeHigh;

   return (size_t) size.QuadPart;
}
Example #11
0
lw_i64 lw_last_modified (const char * filename)
{
   WIN32_FILE_ATTRIBUTE_DATA info;
   LARGE_INTEGER time;

   if (!GetFileAttributesExA (filename, GetFileExInfoStandard, &info))
      return 0;

   time.LowPart = info.ftLastWriteTime.dwLowDateTime;
   time.HighPart = info.ftLastWriteTime.dwHighDateTime;

   return (time_t) ((time.QuadPart - 116444736000000000ULL) / 10000000);
}
Example #12
0
bool file_utils::get_file_size(const char *pFilename, uint64_t &file_size)
{
    file_size = 0;

    WIN32_FILE_ATTRIBUTE_DATA attr;

    if (0 == GetFileAttributesExA(pFilename, GetFileExInfoStandard, &attr))
        return false;

    if (attr.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        return false;

    file_size = static_cast<uint64_t>(attr.nFileSizeLow) | (static_cast<uint64_t>(attr.nFileSizeHigh) << 32U);

    return true;
}
Example #13
0
optional<FileAttributes> GetAttributes(const char* Path)
{
	WIN32_FILE_ATTRIBUTE_DATA wfad;
	if (!GetFileAttributesExA(Path, GetFileExInfoStandard, &wfad))
		return nullopt;
	
	FileAttributes ret{};

	ret.Attributes = wfad.dwFileAttributes;
	ret.CreationTime = GetU64(wfad.ftCreationTime);
	ret.LastAccessTime = GetU64(wfad.ftLastAccessTime);
	ret.LastModifiedTime = GetU64(wfad.ftLastWriteTime);
	ret.Size = GetU64(wfad.nFileSizeHigh, wfad.nFileSizeLow);

	return ret;
}
Example #14
0
// 得到指定文件的大小
ULONGLONG	GetFileSizeA(const char* pszFileName)
{
	if (NULL == pszFileName)
	{
		return 0;
	}
	WIN32_FILE_ATTRIBUTE_DATA data;
	if (GetFileAttributesExA(pszFileName, GetFileExInfoStandard, &data))
	{
		ULONGLONG llFileSize = data.nFileSizeHigh;

		llFileSize <<= sizeof(DWORD)*8; //左移 32 位
		llFileSize += data.nFileSizeLow;
		return llFileSize;
	}
	return 0;
}
Example #15
0
static DWORD WINAPI fallbackGetFileAttributesW(LPCWSTR fname)
{
	DWORD retval = 0;
	const int buflen = (int)(wStrLen(fname) + 1);
	char *cpstr = (char *)__PHYSFS_smallAlloc(buflen);
	WideCharToMultiByte(CP_ACP, 0, fname, buflen, cpstr, buflen, NULL, NULL);
	//retval = GetFileAttributesA(cpstr);
	const BOOL res = GetFileAttributesExA(cpstr, GetFileExInfoStandard, &retval);
	__PHYSFS_smallFree(cpstr);

	if (!res) 
	{
		return 0;
	}

	return(retval);
} /* fallbackGetFileAttributesW */
Example #16
0
static int do_lstat(const char *file_name, struct stat *buf)
{
	WIN32_FILE_ATTRIBUTE_DATA fdata;

	if (GetFileAttributesExA(file_name, GetFileExInfoStandard, &fdata)) {
		int fMode = S_IREAD;

		if (fdata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
			fMode |= S_IFDIR;
		else
			fMode |= S_IFREG;

		if (!(fdata.dwFileAttributes & FILE_ATTRIBUTE_READONLY))
			fMode |= S_IWRITE;

		if (fdata.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)
			fMode |= S_IFLNK;

		buf->st_ino = 0;
		buf->st_gid = 0;
		buf->st_uid = 0;
		buf->st_nlink = 1;
		buf->st_mode = (mode_t)fMode;
		buf->st_size = fdata.nFileSizeLow; /* Can't use nFileSizeHigh, since it's not a stat64 */
		buf->st_dev = buf->st_rdev = (_getdrive() - 1);
		buf->st_atime = filetime_to_time_t(&(fdata.ftLastAccessTime));
		buf->st_mtime = filetime_to_time_t(&(fdata.ftLastWriteTime));
		buf->st_ctime = filetime_to_time_t(&(fdata.ftCreationTime));
		return GIT_SUCCESS;
	}

	switch (GetLastError()) {
	case ERROR_ACCESS_DENIED:
	case ERROR_SHARING_VIOLATION:
	case ERROR_LOCK_VIOLATION:
	case ERROR_SHARING_BUFFER_EXCEEDED:
		return GIT_EOSERR;

	case ERROR_BUFFER_OVERFLOW:
	case ERROR_NOT_ENOUGH_MEMORY:
		return GIT_ENOMEM;

	default:
		return GIT_EINVALIDPATH;
	}
}
Example #17
0
File: mingw.c Project: Pistos/git
/* We keep the do_lstat code in a separate function to avoid recursion.
 * When a path ends with a slash, the stat will fail with ENOENT. In
 * this case, we strip the trailing slashes and stat again.
 */
static int do_lstat(const char *file_name, struct stat *buf)
{
	WIN32_FILE_ATTRIBUTE_DATA fdata;

	if (GetFileAttributesExA(file_name, GetFileExInfoStandard, &fdata)) {
		int fMode = S_IREAD;
		if (fdata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
			fMode |= S_IFDIR;
		else
			fMode |= S_IFREG;
		if (!(fdata.dwFileAttributes & FILE_ATTRIBUTE_READONLY))
			fMode |= S_IWRITE;

		buf->st_ino = 0;
		buf->st_gid = 0;
		buf->st_uid = 0;
		buf->st_mode = fMode;
		buf->st_size = fdata.nFileSizeLow; /* Can't use nFileSizeHigh, since it's not a stat64 */
		buf->st_blocks = size_to_blocks(buf->st_size);
		buf->st_dev = _getdrive() - 1;
		buf->st_atime = filetime_to_time_t(&(fdata.ftLastAccessTime));
		buf->st_mtime = filetime_to_time_t(&(fdata.ftLastWriteTime));
		buf->st_ctime = filetime_to_time_t(&(fdata.ftCreationTime));
		errno = 0;
		return 0;
	}

	switch (GetLastError()) {
	case ERROR_ACCESS_DENIED:
	case ERROR_SHARING_VIOLATION:
	case ERROR_LOCK_VIOLATION:
	case ERROR_SHARING_BUFFER_EXCEEDED:
		errno = EACCES;
		break;
	case ERROR_BUFFER_OVERFLOW:
		errno = ENAMETOOLONG;
		break;
	case ERROR_NOT_ENOUGH_MEMORY:
		errno = ENOMEM;
		break;
	default:
		errno = ENOENT;
		break;
	}
	return -1;
}
Example #18
0
static inline int get_file_attr(const char *fname, WIN32_FILE_ATTRIBUTE_DATA *fdata)
{
	if (GetFileAttributesExA(fname, GetFileExInfoStandard, fdata))
		return 0;

	switch (GetLastError()) {
	case ERROR_ACCESS_DENIED:
	case ERROR_SHARING_VIOLATION:
	case ERROR_LOCK_VIOLATION:
	case ERROR_SHARING_BUFFER_EXCEEDED:
		return EACCES;
	case ERROR_BUFFER_OVERFLOW:
		return ENAMETOOLONG;
	case ERROR_NOT_ENOUGH_MEMORY:
		return ENOMEM;
	default:
		return ENOENT;
	}
}
Example #19
0
File: Menu.cpp Project: mrDIMAS/src
string GetFileCreationDate(const string & pFileName) {
	stringstream ss;
	WIN32_FILE_ATTRIBUTE_DATA wfad;
	SYSTEMTIME st;
	SYSTEMTIME localTime;

	GetFileAttributesExA(pFileName.c_str(), GetFileExInfoStandard, &wfad);
	FileTimeToSystemTime(&wfad.ftLastWriteTime, &st);

	SystemTimeToTzSpecificLocalTime(nullptr, &st, &localTime);

	ss << setfill('0') << setw(2) << localTime.wDay << '/' <<
		setfill('0') << setw(2) << localTime.wMonth << '/' <<
		setw(4) << localTime.wYear << " - " <<
		setfill('0') << setw(2) << localTime.wHour << ":" <<
		setfill('0') << setw(2) << localTime.wMinute << ":" <<
		setfill('0') << setw(2) << localTime.wSecond;

	return ss.str();
}
Example #20
0
/*
 * __wt_filesize_name --
 *	Return the size of a file in bytes, given a file name.
 */
int
__wt_filesize_name(
    WT_SESSION_IMPL *session, const char *filename, wt_off_t *sizep)
{
	WT_DECL_RET;
	WIN32_FILE_ATTRIBUTE_DATA data;
	char *path;

	WT_RET(__wt_filename(session, filename, &path));

	ret = GetFileAttributesExA(path, GetFileExInfoStandard, &data);

	__wt_free(session, path);

	if (ret != 0) {
		*sizep =
		    ((int64_t)data.nFileSizeHigh << 32) | data.nFileSizeLow;
		return (0);
	}

	WT_RET_MSG(session, __wt_errno(), "%s: GetFileAttributesEx", filename);
}
Example #21
0
        size_t File::SizeBytes(void)
        {
            #ifdef HT_SYS_LINUX
                //Need to grab size from stat struct in order to allow for
                //files > 2GB in size
                struct stat st;
                stat(m_path.c_str(), &st);
                m_size = st.st_size;
            #else
                WIN32_FILE_ATTRIBUTE_DATA fad;
                if (!GetFileAttributesExA(m_path.c_str(), GetFileExInfoStandard, &fad))
                    return -1;

                LARGE_INTEGER size;
                size.HighPart = fad.nFileSizeHigh;
                size.LowPart = fad.nFileSizeLow;

                m_size = static_cast<size_t>(size.QuadPart);
            #endif

            return m_size;
        }
internal win32_game_code Win32LoadGameCode(char *SourceDLLName, char *TempDLLName, char *LockFileName) {
	win32_game_code Result = {};

	WIN32_FILE_ATTRIBUTE_DATA Ignored;
	if (!GetFileAttributesExA(LockFileName, GetFileExInfoStandard, &Ignored)) {
		Result.DLLLastWriteTime = Win32GetLastWriteTime(SourceDLLName);
		CopyFileA(SourceDLLName, TempDLLName, FALSE);
		Result.GameCodeDLL = LoadLibraryA(TempDLLName);

		if (Result.GameCodeDLL) {
			Result.UpdateAndRender = (game_update_and_render *)GetProcAddress(Result.GameCodeDLL, "GameUpdateAndRender");
			Result.GetSoundSamples = (game_get_sound_samples *)GetProcAddress(Result.GameCodeDLL, "GameGetSoundSamples");
			Result.IsValid = (Result.UpdateAndRender && Result.GetSoundSamples);
		}
	}

	if (!Result.IsValid) {
		Result.UpdateAndRender = 0;
		Result.GetSoundSamples = 0;
	}

	return(Result);
}
Example #23
0
File: os_fs.c Project: GYGit/mongo
/*
 * __wt_win_fs_size --
 *	Get the size of a file in bytes, by file name.
 */
int
__wt_win_fs_size(WT_FILE_SYSTEM *file_system,
    WT_SESSION *wt_session, const char *name, wt_off_t *sizep)
{
	DWORD windows_error;
	WIN32_FILE_ATTRIBUTE_DATA data;
	WT_SESSION_IMPL *session;

	WT_UNUSED(file_system);

	session = (WT_SESSION_IMPL *)wt_session;

	if (GetFileAttributesExA(name, GetFileExInfoStandard, &data) != 0) {
		*sizep =
		    ((int64_t)data.nFileSizeHigh << 32) | data.nFileSizeLow;
		return (0);
	}

	windows_error = __wt_getlasterror();
	__wt_errx(session,
	    "%s: file-size: GetFileAttributesEx: %s",
	    name, __wt_formatmessage(session, windows_error));
	return (__wt_map_windows_error(windows_error));
}
Example #24
0
    //---------------------------------------------------------------------
	bool FileSystemLayer::fileExists(const Ogre::String& path) const
	{
		WIN32_FILE_ATTRIBUTE_DATA attr_data;
		return GetFileAttributesExA(path.c_str(), GetFileExInfoStandard, &attr_data) != 0;
	}