Fileutil: Fix file size and data reading.

This commit is contained in:
2015-11-12 00:50:13 +01:00
parent 7b81703884
commit 3ff1d00b50
2 changed files with 49 additions and 46 deletions

View File

@@ -60,7 +60,7 @@ FILETIME POSIX_to_FileTime(FileTime fileTime) {
FileTime FileTime_Get(char *fileName) { FileTime FileTime_Get(char *fileName) {
HANDLE hFile; HANDLE hFile;
FILETIME ftCreate, ftAccess, ftWrite; FILETIME ftCreate, ftAccess, ftWrite;
hFile = CreateFile(fileName, GENERIC_READ, FILE_SHARE_READ, NULL, hFile = CreateFile(fileName, READ_CONTROL, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
GetFileTime(hFile, &ftCreate, &ftAccess, &ftWrite); GetFileTime(hFile, &ftCreate, &ftAccess, &ftWrite);
CloseHandle(hFile); CloseHandle(hFile);
@@ -95,6 +95,50 @@ void FileTime_Set(char *fileName, FileTime t) {
#endif #endif
#ifdef WIN32
long long File_GetSize(char *fileName) {
HANDLE hFile;
DWORD fSize;
hFile = CreateFile(fileName, READ_CONTROL, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
fSize = GetFileSize(hFile, NULL);
CloseHandle(hFile);
return (fSize);
}
#else
long long File_GetSize(char *fileName) {
struct stat fs;
lstat(fileName, &fs);
return (fs.st_size);
}
#endif
#ifdef WIN32
void File_GetSizeAndTime(char *fileName, long long *size, FileTime *time) {
HANDLE hFile;
DWORD fSize;
FILETIME ftCreate, ftAccess, ftWrite;
hFile = CreateFile(fileName, READ_CONTROL, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
fSize = GetFileSize(hFile, NULL);
GetFileTime(hFile, &ftCreate, &ftAccess, &ftWrite);
CloseHandle(hFile);
*size = fSize;
*time = FileTime_to_POSIX(ftWrite);
}
#else
void File_GetSizeAndTime(char *fileName, long long *size, FileTime *time) {
struct stat fs;
lstat(fileName, &fs);
*size = fs.st_size;
*time = fs.st_mtime;
}
#endif
void FileTime_Print(FileTime fileTime) { void FileTime_Print(FileTime fileTime) {
struct tm *tms; struct tm *tms;
@@ -199,47 +243,6 @@ int File_IsFile(char *fileName) {
#endif #endif
#ifdef WIN32
long long File_GetSize(char *fileName) {
HANDLE hFile;
DWORD fSize;
hFile = CreateFile(fileName, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
GetFileSize(hFile, &fSize);
CloseHandle(hFile);
return (fSize);
}
#else
long long File_GetSize(char *fileName) {
struct stat fs;
lstat(fileName, &fs);
return (fs.st_size);
}
#endif
#ifdef WIN32
void File_GetSizeAndTime(char *fileName, long long *size, FileTime *time) {
HANDLE hFile;
DWORD fSize;
FILETIME ftCreate, ftAccess, ftWrite;
hFile = CreateFile(fileName, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
GetFileSize(hFile, &fSize);
GetFileTime(hFile, &ftCreate, &ftAccess, &ftWrite);
CloseHandle(hFile);
*size = fSize;
*time = FileTime_to_POSIX(ftWrite);
}
#else
void File_GetSizeAndTime(char *fileName, long long *size, FileTime *time) {
struct stat fs;
lstat(fileName, &fs);
*size = fs.st_size;
*time = fs.st_mtime;
}
#endif

View File

@@ -16,6 +16,10 @@ void FileTime_Print(FileTime t);
#define MaxPath 4096 #define MaxPath 4096
#define MaxPathNodes 512 #define MaxPathNodes 512
long long File_GetSize(char *fileName);
void File_GetSizeAndTime(char *fileName, long long *size, FileTime *time);
void File_GetName(char *path, char *name); void File_GetName(char *path, char *name);
int File_ExistsPath(char *path); int File_ExistsPath(char *path);
@@ -24,10 +28,6 @@ int File_IsDirectory(char *path);
int File_IsFile(char *path); int File_IsFile(char *path);
long long File_GetSize(char *fileName);
void File_GetSizeAndTime(char *fileName, long long *size, FileTime *time);
int File_MakeDirectory(char *path); int File_MakeDirectory(char *path);
void File_IterateDir(char *path, void File_IterateDir(char *path,