, :
GetFilelnformationByHandle (
HANDLE hFile, //
//
LPBY_HANDLE_FILE_INFORMATION lpFilelnformation
);
lpFilelnformation LPBY_HANDLE_FILE_INFORMATION, .
typedef struct _BY_HANDLE_FILE_INFORMATION {
DWORD dwFileAttributes; //
FILETIME ftCreationTime; //
FILETIME ftLastAccessTime; //
FILETIME ftLastWriteTime; //
DWORD dwVolumeSerialNumber; //
DWORD nFileSizeHigh; //
DWORD nFileSizeLow; //
DWORD nNumberOfLinks; //
DWORD nFileIndexHigh; //
DWORD nFileIndexLow; //
} BY_HANDLE_FILE_INFORMATION, *LPBY_HANDLE_FILE_INFORMATION;
1. , .
#include <windows.h>
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <math.h>
using namespace std;
HANDLE creatfile(char* buf)
{
HANDLE hFile= CreateFile(buf, GENERIC_WRITE, FILE_SHARE_READ |FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
cerr << "Open file failed." << endl
<< "The last error code: " << GetLastError();
cout << "\nPress any key to finish.";
getch();
return hFile;
}
cout << "The file is opened." << endl;
//CloseHandle(hFile);
return hFile;
}
char * getfileattributes(char* lpFileName)
{
char cBuffer[0x1000]="";
DWORD dwFileAttributes=GetFileAttributes(lpFileName);
cout << endl<< lpFileName << " - 0x" << hex << dwFileAttributes << ": ";
dec(cout);
for(int i = 31; i >= 0; i--) if(dwFileAttributes & (1 << i)) cout << "1"; else cout << "0";
if(dwFileAttributes & FILE_ATTRIBUTE_READONLY) strcat(cBuffer, "\n\tFILE_ATTRIBUTE_READONLY");
if(dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) strcat(cBuffer,"\n\t FILE_ATTRIBUTE_HIDDEN");
if(dwFileAttributes & FILE_ATTRIBUTE_SYSTEM) strcat(cBuffer, "\n\tFILE_ATTRIBUTE_SYSTEM");
if(dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) strcat(cBuffer,"\n\t FILE_ATTRIBUTE_DIRECTORY");
if(dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE) strcat(cBuffer,"\n\t FILE_ATTRIBUTE_ARCHIVE");
if(dwFileAttributes & FILE_ATTRIBUTE_NORMAL) strcat(cBuffer,"\n\t FILE_ATTRIBUTE_NORMAL");
if(dwFileAttributes & FILE_ATTRIBUTE_TEMPORARY) strcat(cBuffer,"\n\t FILE_ATTRIBUTE_TEMPORARY");
if(dwFileAttributes & FILE_ATTRIBUTE_COMPRESSED) strcat(cBuffer,"\n\t FILE_ATTRIBUTE_COMPRESSED");
|
|
if(dwFileAttributes & FILE_FLAG_POSIX_SEMANTICS) strcat(cBuffer,"\n\t FILE_FLAG_POSIX_SEMANTICS");
if(dwFileAttributes & FILE_FLAG_BACKUP_SEMANTICS) strcat(cBuffer,"\n\t FILE_FLAG_BACKUP_SEMANTICS");
if(dwFileAttributes & FILE_FLAG_DELETE_ON_CLOSE) strcat(cBuffer, "\n\t FILE_FLAG_DELETE_ON_CLOSE");
if(dwFileAttributes & FILE_FLAG_SEQUENTIAL_SCAN) strcat(cBuffer,"\n\t FILE_FLAG_SEQUENTAL_SCAN");
if(dwFileAttributes & FILE_FLAG_RANDOM_ACCESS) strcat(cBuffer,"\n\t FILE_FLAG_RANDOM_ACCESS");
if(dwFileAttributes & FILE_FLAG_NO_BUFFERING) strcat(cBuffer,"\n\t FILE_FLAG_NO_BUFFERING");
if(dwFileAttributes & FILE_FLAG_OVERLAPPED) strcat(cBuffer,"\n\t FILE_FLAG_OVERLAPPED");
if(dwFileAttributes & FILE_FLAG_WRITE_THROUGH) strcat(cBuffer,"\n\t FILE_FLAG_WRITE_THROUGH");
return cBuffer;
}
bool setfileattributes(char* lpFileName)
{
DWORD adwFileAttributes[16]={
FILE_ATTRIBUTE_READONLY,
FILE_ATTRIBUTE_HIDDEN,
FILE_ATTRIBUTE_SYSTEM,
FILE_ATTRIBUTE_DIRECTORY,
FILE_ATTRIBUTE_ARCHIVE,
FILE_ATTRIBUTE_NORMAL,
FILE_ATTRIBUTE_TEMPORARY,
FILE_ATTRIBUTE_COMPRESSED,
FILE_FLAG_POSIX_SEMANTICS,
FILE_FLAG_BACKUP_SEMANTICS,
FILE_FLAG_DELETE_ON_CLOSE,
FILE_FLAG_SEQUENTIAL_SCAN,
FILE_FLAG_RANDOM_ACCESS,
FILE_FLAG_NO_BUFFERING,
FILE_FLAG_OVERLAPPED,
FILE_FLAG_WRITE_THROUGH
};
int i,set;
DWORD dwFileAttributes=GetFileAttributes(lpFileName);
while (1)
{
system("cls");
cout<<getfileattributes(lpFileName)<<endl;
cout << "\nATTRIBUTES:\n";
cout << "\tFILE_ATTRIBUTE_READONLY - 1" << endl;
cout << "\tFILE_ATTRIBUTE_HIDDEN - 2"<< endl;
cout << "\tFILE_ATTRIBUTE_SYSTEM - 3"<< endl;
cout << "\tFILE_ATTRIBUTE_DIRECTORY - 4"<< endl;
cout << "\tFILE_ATTRIBUTE_ARCHIVE - 5"<< endl;
cout << "\tFILE_ATTRIBUTE_NORMAL - 6"<< endl;
cout << "\tFILE_ATTRIBUTE_TEMPORARY - 7"<< endl;
cout << "\tFILE_ATTRIBUTE_COMPRESSED - 8"<< endl;
cout << "\tFILE_FLAG_POSIX_SEMANTICS - 9"<< endl;
cout << "\tFILE_FLAG_BACKUP_SEMANTICS- 10"<< endl;
cout << "\tFILE_FLAG_DELETE_ON_CLOSE - 11"<< endl;
cout << "\tFILE_FLAG_SEQUENTIAL_SCAN - 12"<< endl;
cout << "\tFILE_FLAG_RANDOM_ACCESS - 13"<< endl;
cout << "\tFILE_FLAG_NO_BUFFERING - 14"<< endl;
cout << "\tFILE_FLAG_OVERLAPPED - 15"<< endl;
cout << "\tFILE_FLAG_WRITE_THROUGH - 16"<< endl;
cout << "\nType a number!(1..16 - change attribute/0 - return for main menu) ";
cin >> i;
if (!i) return 0;
else
{
cout << "\nType '1' to set attrebut and '0' to unset!(1/0) ";
cin >> set;
if(set==0) {dwFileAttributes=dwFileAttributes ^ adwFileAttributes[i-1]; } else
if(set==1) {dwFileAttributes=dwFileAttributes | adwFileAttributes[i-1];}
cout << endl<< "0x" << hex << dwFileAttributes << ": ";
|
|
dec(cout);
for(int i = 31; i >= 0; i--) if(dwFileAttributes & (1 << i)) cout << "1"; else cout << "0";
getch();
if(!SetFileAttributes(lpFileName,dwFileAttributes))
cerr << "Set File Attributes failed." << endl
<< "The last error code: " << GetLastError();
}
}
}
int main()
{
char buf[256],FileName[256]="";
HANDLE hFile;
DWORD lpFileSizeHigh;
BY_HANDLE_FILE_INFORMATION fi;
FILETIME ft;SYSTEMTIME st;
int iMenu;char cMenu[200]=" :\n1 - / \n2 - / \n3 - / \n4 - \n5 - \n;
CharToOem(cMenu, cMenu);
CharToOem("I' ?\n", buf); cout << buf; cin >> FileName;
if ((hFile=creatfile(FileName))!=INVALID_HANDLE_VALUE)
while(1)
{
system("cls");
cout << cMenu; cin >> iMenu;
switch(iMenu)
{
case 1:
CharToOem(" :\n", buf); cout << buf;
cout<<getfileattributes(FileName)<<endl;
CharToOem("\n ?(y/n) ",buf); cout << buf; cin >> buf;
if(*buf=='y') setfileattributes(FileName);
break;
case 2:
CharToOem(" :\n", buf); cout << buf;
cout<<FileName<<" - "<<(floor(((double)GetFileSize(hFile,&lpFileSizeHigh)/1024)*100)/100)<< " KB" <<endl;
CharToOem("\n ?(y/n) ",buf); cout << buf; cin >> buf;
if(*buf=='y')
{
CharToOem(" ? ", buf); cout << buf;cin >>lpFileSizeHigh;
SetFilePointer(hFile,lpFileSizeHigh,NULL,FILE_BEGIN);
if(SetEndOfFile(hFile)) cout<<"size changed";
else cerr<<"size chang failed"<< endl
<<"The last error code: "<< GetLastError();
}
cout<<"\nPress any key to continue!";
getch();
break;
case 3:
CharToOem(" :\n\t - 1\n\t - 2\n", buf); cout << buf;cin>>buf;
if (*buf=='1')
{
if(LockFile(hFile,0,0,GetFileSize(hFile,&lpFileSizeHigh),0)) cout << "file locked";
else cerr<<"file lock filed"<< endl
<<"The last error code: "<< GetLastError();
}else
if (*buf=='2')
{
if(UnlockFile(hFile,0,0,GetFileSize(hFile,&lpFileSizeHigh),0)) cout << "file unlocked";
else cerr<<"file unlock filed"<< endl
<<"The last error code: "<< GetLastError();
}
cout<<"\nPress any key to continue!";
getch();
break;
case 4:
CharToOem(" :\n", buf); cout << buf;
if(GetFileInformationByHandle(hFile,&fi))
{
cout << endl << "ATTRIBUTES:" <<endl;
if(fi.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE) cout<<"\tFILE_ATTRIBUTE_ARCHIVE\n";
if(fi.dwFileAttributes & FILE_ATTRIBUTE_COMPRESSED) cout<<"\tFILE_ATTRIBUTE_COMPRESSED\n";
if(fi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) cout<<"\tFILE_ATTRIBUTE_DIRECTORY\n";
if(fi.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) cout<<"\tFILE_ATTRIBUTE_HIDDEN\n";
if(fi.dwFileAttributes & FILE_ATTRIBUTE_NORMAL) cout<<"\tFILE_ATTRIBUTE_NORMAL\n";
if(fi.dwFileAttributes & FILE_ATTRIBUTE_READONLY) cout<<"\tFILE_ATTRIBUTE_READONLY\n";
if(fi.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM) cout<<"\tFILE_ATTRIBUTE_SYSTEM\n";
if(fi.dwFileAttributes & FILE_ATTRIBUTE_TEMPORARY) cout<<"\tFILE_ATTRIBUTE_TEMPORARY\n";
FileTimeToSystemTime(&fi.ftCreationTime, &st);
|
|
cout<<endl<<"FILE TIME:"<<endl
<<"\tCreation Time "<<st.wYear<<"-"<<st.wMonth<<"-"<<st.wDay<<" "<<st.wHour<<":"<<st.wMinute<<":"<<st.wSecond<<endl;
FileTimeToSystemTime(&fi.ftLastAccessTime, &st);
cout<<"\tLast Access "<<st.wYear<<"-"<<st.wMonth<<"-"<<st.wDay<<" "<<st.wHour<<":"<<st.wMinute<<":"<<st.wSecond<<endl;
FileTimeToSystemTime(&fi.ftLastWriteTime, &st);
cout<<"\tLast Write "<<st.wYear<<"-"<<st.wMonth<<"-"<<st.wDay<<" "<<st.wHour<<":"<<st.wMinute<<":"<<st.wSecond<<endl;
cout<<endl
<<"Volume Serial Number "<<fi.dwVolumeSerialNumber<<endl;
cout<<"File Size "<<(floor(((double)fi.nFileSizeLow/1024)*100)/100)<< " KB" <<endl;
cout<<"Number Of Links "<<fi.nNumberOfLinks<<endl;
cout<<"File Index (Low High) "<<fi.nFileIndexLow<<" "<<fi.nFileIndexHigh<<endl;
}
else cerr<<"Get file information filed"<< endl
<<"The last error code: "<< GetLastError();
cout<<"\nPress any key to continue!";
getch();
break;
case 5: CloseHandle(hFile);return 0;
}
}
return 0;
}
1. :
− ;
− ;
− ;
− .
2. , .
3. , .
1. ?
2. ?
3. ?
4. ?
10
: Win32 API
:
1. Win32API, .
2. , , , .
:
BOOL CreateDirectory(
LPCTSTR lpPathName, //
LPSECUTITY_ATTRIBUTES lpSecurutyAttributes //
);
CreateDirectoryEx.
BOOL CreateDirectoryEx(
LPCSTR lpTemplateDirectory, //
LPCTSTR lpNewDirectory, //
LPSECUTITY_ATTRIBUTES lpSecurutyAttributes //
);
, , :
HANDLE FindFirstFile(
LPCTSTR lpFileName, //
LPWIN32_FIND_DATA lpFindFileData //
);
FindFirstFile , FindNextFile, INVALID_HANDLE_VALUE.
|
|
lpFindFileData WIN32_FIND_DATA:
typedef struct _WIN32_FIND_DATA {
DWORD dwFileAttributes; //
FILETIME ftCreationTime; //
FILETIME ftLastAccessTime; //
FILETIME ftLastWriteTime; //
DWORD nFileSizeHigh; //
DWORD nFileSizeLow; //
DWORD dwReserved0; //
DWORD dwReservedl; //
CHAR cFileName[ MAX_PATH ]; //
CHAR cAlternateFileName[ 14 ]; //
} WIN32_FIND_DATA, *PWIN32_FIND_DATA, *LPWIN32_FIND_DATA;
FindNextFile:
BOOL FindNextFile (
HANDLE hFindFile, //
LPWIN32_FIND_DATA lpFindFileData //
);
, , FindClose, :
BOOL FindClose(
HANDLE hFindFile //
);
:
BOOL RemoveDirectory(
LPCTSTR lpPathName //
);
BOOL MoveFile(
LPCTSTR lpExistingFileName, //
LPCTSTR lpNewFileName // );