[1.1] 自分が今行いたい事は何か
ファイル名を指定して、そのファイルの最終書き込み時間を表示するプログラムで、コンソールからファイル名を入力したい。
[1.2] どのように取り組んだか(プログラムコードがある場合記載)
コンソールから
BuildLog.htm
C:\\Documents and Settings\\Owner\\My Documents\\Visual Studio Projects\\Win32SystemServicesPrograming\\GetFileTime\\Debug\\BuildLog.htm
C:/Documents and Settings/Owner/My Documents/Visual Studio Projects/Win32SystemServicesPrograming/GetFileTime/Debug/BuildLog.htm
C:\Documents and Settings\Owner\My Documents\Visual Studio Projects\Win32SystemServicesPrograming\GetFileTime\Debug\BuildLog.htm
を試しに入力してみた。また、コンソールから入力するのではなく、ファイル名変数にstrcpy関数でファイル名をコピーする方法も試した。
コード: 全て選択
#include <windows.h>
#include <iostream.h>
#include <stdio.h>
#include <string.h>
void ShowTime(FILETIME t)
//時間tをstdoutに打ち出す
{
FILETIME ft;
SYSTEMTIME st;
FileTimeToLocalFileTime(&t, &ft);
FileTimeToSystemTime(&ft, &st);
cout << st.wMonth << "/" << st.wDay << "/" << st.wYear << " " << st.wHour << ":" << st.wMinute << endl;
}
void main()
{
HANDLE fileHandle;
char filename[MAX_PATH];
FILETIME create, lastWrite, lastAccess;
BOOL success;
//strcpy(filename, "C:\\Documents and Settings\\Owner\\My Documents\\Visual Studio Projects\\Win32SystemServicesPrograming\\GetFileTime\\Debug\\BuildLog.htm"); //←これだとうまくいく
//ファイル名取得
cout << "Enter filename: ";
cin >> filename; //←入力してもエラーになる
//ファイルオープン
fileHandle = CreateFile(filename, GENERIC_READ, FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
if (fileHandle == INVALID_HANDLE_VALUE)
{
cout << "Error number " << GetLastError() << endl;
getchar();
getchar();
return;
}
else
{
//ファイル時間取得
success = GetFileTime( fileHandle, &create, &lastAccess, &lastWrite);
cout << "Last write time: ";
ShowTime(lastWrite);
//他の2つはFATには無い
}
CloseHandle(fileHandle);
getchar();
getchar();
}
ファイル名をコンソールから入力したら
Error number 2
と表示される。エラーコードの意味は多分「The system cannot find the file specified. 」でシステムがファイルを見つけられないようだ。
strcpy(filename, "C:\\Documents and Settings\\Owner\\My Documents\\Visual Studio Projects\\Win32SystemServicesPrograming\\GetFileTime\\Debug\\BuildLog.htm");
↑のようにすればうまくいく。
[1.4] 今何がわからないのか、知りたいのか
ファイル名をコンソールから入力して、うまくいく方法を知りたい。
[2] 環境
[2.1] OS : Windows XP(VMwareでシュミレーションされたもの)
[2.2] コンパイラ名 : VC++ 2002
[3] その他
・どの程度C言語を理解しているか
基本的な文法を理解している
・ライブラリを使っている場合は何を使っているか