【VC++2005(CLR)】ファイルの更新日時を取得するには?

このQ&Aのポイント
  • VC++初心者の方から、ファイルの更新日時を取得する方法を教えて欲しいという質問です。
  • 現在のソースコードでは、実際の最終更新日と取得した更新日が異なる問題が発生しています。
  • 具体的にどこが改善すべきかについての指摘をお願いしたいとのことです。
回答を見る
  • ベストアンサー

【VC++2005(CLR)】ファイルの更新日時を取得するには?

いつもお世話になっております。 VC++初心者です。 ファイルの更新日時を取得するには、どうしたら宜しいか 教えて頂けませんでしょうか。 現在このようなソースを書きましたが、 aaa.txtの実際の最終更新日とこのソースで取得した更新日が 全く異なります。 (このソースで取得した日付は、このプログラムを実行した 時間(それに近い時間)を出力しています。) String^ souceFile_rep = "aaa.txt"; //レポートファイルのタイムスタンプ取得 System::IO::FileInfo^ pFileProps = gcnew System::IO::FileInfo(sourceFile); DateTime dtSourceFileLastWrite = pFileProps->LastAccessTime; String^ strSourceFileLastWrite = dtSourceFileLastWrite.ToString(); delete pFileProps; 具体的にどこが、良くなかったのかご指摘頂けませんでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • nishito24
  • ベストアンサー率90% (10/11)
回答No.2

No1追加 pFileProps->LastAccessTime; より pFileProps->LastWriteTime; の方がいいかも

yuki7091
質問者

お礼

ご回答、ありがとうございます。 ご指摘頂いたとおり、変更すると 問題解決しました。

その他の回答 (1)

  • nishito24
  • ベストアンサー率90% (10/11)
回答No.1

> System::IO::FileInfo^ pFileProps = gcnew System::IO::FileInfo(sourceFile); の変数sourceFileが定義されてないですが、値は何が入っていますか? プログラムの実行時ディレクトリとファイルがあるディレクトリが違う場合は"c:\\temp\\aaa.txt"のように絶対パスを指定することが必要です。

yuki7091
質問者

補足

ご回答ありがとうございます。 誤記がございました。 誤:String^ souceFile_rep = "aaa.txt"; 正:String^ souceFile = "aaa.txt"; なので、String型です。 また、相対パスではまずいでしょうか?

関連するQ&A

  • 【VC++2005(CLR)】読み込んだcsvファイルの一部を書き換えたい

    いつも大変お世話になっております。 VC++初心者です。 現在、VC++2005 Express Edition CLRでプロジェクトを作成しています。 表題の件なのですが、今まで以下のようにコーディングしていましたが、 読み取りはできるものの、書き込みができません。 何か良い方法はありませんでしょうか。 希望としては、ファイルの一箇所のみを書き換えたいので、 書き込み専用のファイルを用意して、読み込みファイルを 一行、一行コピーしたくないです。   すみませんが、よろしくお願い致します。 ***(表示を考慮するため、行の先頭に全角スペースを入れています。)*** String^ strDelimiter = ","; //","で分割する array<Char>^ delimiter = strDelimiter->ToCharArray(); array<String^>^ strData; //分割後の文字の入れ物 String^ strLine; //1行分のデータ System::IO::FileStream^ fs = gcnew System::IO::FileStream  (path, System::IO::FileMode::Open, System::IO::FileAccess::ReadWrite, System::IO::FileShare::ReadWrite); System::IO::StreamReader^ sr =   gcnew System::IO::StreamReader(fs,System::Text::Encoding::Default);  while(sr->Peek() >= 0){ //csvデータ分繰り返し   strLine = sr->ReadLine(); //1行読み込み   strData = strLine->Split(delimiter); //「,」で区切って、配列に分解   if (iWorkNum == int::Parse(strData[0])){    strData[2] = strWorkTime;//書き換えたい箇所はここだけ    //※ここからの処理方法を教えて下さい。   }  } } sr->Close(); fs->Close();  

  • VC++ DateTimeを使った現在時刻取得

    VC++(CLI)で、現在時刻をstd::string文字列として、取得しようとしています。 時刻取得に、DateTime::ToStringを使うと、System::String でしか取得できません。 DateTime dt = DateTime::Now; String^ st= dt.ToString("HH:mm:ss");                  ↑この形式で、std::string文字列を取り出したい。 System::String から std::stringへの変換は、単純なキャストではなく変換処理が必要なので、他の方法を探しています。 他に思いつくのは、標準関数のtime.h localtimeから変換する方法くらいですが、他にstd::stringで必d家を取得する方法があれば教えてください。 環境: Win7 VC++2010 Express

  • 実行可能jarファイルのファイル名取得

    javaの実行可能jarファイルの中で、そのjarファイル名を取得する方法はどうすればよいでしょうか? なお、クラスファイル名は次の方法で取得できています。 public class AAA { public static void main(String[] args) { System.err.println( AAA.class.getResource("AAA.class").toString()); } } 2011年10月16日

    • ベストアンサー
    • Java
  • VCでJetによるCSVファイルの読み込み

    VCでJetによるCSVファイルを読み込む時、test_1=1,(2.0,3.0)で の”(2.0”を読み込めないです。”(”のせいかと思いますが、対処 方法を教えてください。 String^ test = gcnew String("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + csvdir + ";Extended Properties=\"text;HDR=Yes;FMT=Delimited\""); ...... csvSelect = gcnew String("SELECT * FROM [" + csvname + "]"); ....... OleDbDataReader^ reader = cmd->ExecuteReader(); //読み込みデータ test_1=1,(2.0,3.0) testdata1 = (String ^)reader[0]->ToString(); ”test_1=1”を読み込める。 testdata2 = (String ^)reader[1]->ToString(); ”(2.0”を読み込めない testdata2 は””となります。 testdata3 = (String ^)reader[2]->ToString(); ”3.0)”を読み込める

  • 【VC++2005(CLR)】ファイル書き込み時、他でファイルが開かれていると落ちる

    いつも大変お世話になっています。 VC初心者です。 現在、ファイル書き込み処理で悩んでいます。 他のユーザがファイルをオープンしてたり、開こうとすると 落ちてしまいます。 たとえば、ファイルが開かれていることを検知して、 ユーザに「ファイルを閉じてください」とメッセージを出した後、 再度書き込み処理を実行できませんでしょうか。 (書き込み中は他のユーザからのアクセスを拒否させたいです。) 現在以下のようなソースを書いています。 //ファイルオープン System::IO::StreamWriter^ sw = gcnewSystem::IO::StreamWriter( path_w,false,System::Text::Encoding::Default); //ファイル書き込み String^ newData = "aaa"; sw->WriteLine(newData); //ファイルクローズ sw->Close(); お手数ですが、よろしくお願いします。

  • テキストファイルの更新日時を取得

    ジャバスクリプトを使用して○○○.txtというテキストファイルの更新日時を取得して その取得した日時をHTML内で表示する方法を教えてください。 表示形式は2009/00/00みたいなのが希望です。 すいませんジャバスクリプトは初心者なもので・・・・ 初心者向けに分かりやすくアドバイスいただけると助かります。 宜しくお願いします。

  • VC++でファイルへの書き込みについて

    VC++にて、ファイルへの書き込みを行っているのですが、どうもうまくいきません。 Form.h //ファイル->開く private: System::Void 開くOToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { //開くダイアログ表示 OpenFileDialog^ dlg = gcnew OpenFileDialog(); dlg -> Filter = "CSV形式(*.csv)|*.csv|すべてのファイル(*.*)|*.*"; if (dlg -> ShowDialog() != System::Windows::Forms::DialogResult::OK){ return; } //CSV形式でファイルを読み込み LoadCsvFile( dlg -> FileName ); } //ファイルの読み込み private: bool LoadCsvFile( String^ path ){ //ファイルをオープン StreamReader^ reader = gcnew StreamReader( path, System::Text::Encoding::GetEncoding("shift-jis")); //ファイル読み込み String^ data; data = reader -> ReadLine(); st = from_cli(data); //dataをグローバル変数std::string = stに変換 reader -> Close(); return true; } //System::String -> std::string変換用 std::string from_cli(String^ input, Encoding^ encoding) { array<Byte>^ result = Encoding::Convert(Encoding::Unicode, encoding, Encoding::Unicode->GetBytes(input)); if ( result->Length != 0 ) { pin_ptr<unsigned char> pin = &result[0]; return std::string(reinterpret_cast<char*>(pin), result->Length); } return std::string(); } //ボタンクリックイベント private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { std::ofstream ofs; ofs.open( "test.txt" ); ofs << st << std::endl; ……(1) ofs.close(); } csvファイルを読み込み後、ボタンクリックイベントを行ってもtext.txtの内容が書き変わりません。 (1)の部分をofs << "test" << std::endl;に変更したり、 button1_Click内で変数st2を宣言し、 ofs << st2 << std::endl;に変更すると、問題無くファイルへの書き出しが行えます。 文字コード等が関わっているのでしょうか? 御助言の程、よろしくお願いします。

  • VCでJetによるCSVファイルの読み込み

    VCでJetによるCSVファイルを読み込む時、test_1=1,(2.0,3.0)で の”(2.0”を読み込めないです。”(”のせいかと思いますが、対処 方法を教えてください。 String^ test = gcnew String("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + csvdir + ";Extended Properties=\"text;HDR=Yes;FMT=Delimited\""); ...... csvSelect = gcnew String("SELECT * FROM [" + csvname + "]"); ....... OleDbDataReader^ reader = cmd->ExecuteReader(); //読み込みデータ test_1=1,(2.0,3.0) testdata1 = (String ^)reader[0]->ToString(); ”test_1=1”を読み込める。 testdata2 = (String ^)reader[1]->ToString(); ”(2.0”を読み込めない testdata2 は””となります。 testdata3 = (String ^)reader[2]->ToString(); ”3.0)”を読み込める >>>回答者:edp3142 Extended Properties の右辺に IMEX=1 を追加するといけるかな? IMEX=1を追加してもだめでした。 テキストなので、以下のように設定していますが、問題がないでしょうか ;Extended Properties=\"text;HDR=Yes;IMEX=1;FMT=Delimited\" >>>回答者:redfox63 当方の環境では うまく取得できるようですが ・・・ >>>VC2005/2008/2010 デバッグ環境での検証ですけど >>>reader->IsDBNull(1) は falseを返すんでしょうか? >>>testdata2 = reader->GetString(1);でも同じ結果ですか VC2008デバッグ環境で行っていました。reader->IsDBNull(1) は1となっています。 testdata2 = reader->GetString(1);で追加すると、実行するとcatch(Exceptionまで 直接にいき、読み込みがそのままで終了します。

  • VC++2008 フォーム間の変数の受け渡しについて

    フォーム1で DateTime d1; int year; d1 = DateTime::Now; year = System::Int32::Parse( d1.ToString("yyyy") ); で読み込んだ現在の年数を、フォーム2で使いたい場合どうすればいいのでしょうか? private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { Form2^ f = gcnew Form2(); f->Show(); } でForm2を読み込んでいるので、ここに「変数yearを使う」旨を書けばいいのかとも思いましたが、うまく行きませんでした。 使用しているのはVisualC++2008 ExpressEdition。 ボタンをクリックすると別フォームを表示して、そこで元のフォームで使った変数を使おうと考えています。

  • ファイルの更新日時を取得する手法を教えて下さい。

    Excel2003のマクロにて、ファイルの更新日時を取得しようとして、次の構文を作りましたが、×印のところで実行時エラー438が発生します。 CreateObjectの作り方が間違っているのではないかと思うのですが、具体的な方法が判らず、泣いています。 何方か、ファイルの更新日時を取得する手法を教えて下さい。 宜しくお願いします。 Sub ファイルの更新日時取得() Dim A, B Dim AA Dim SSS() Dim AAA, BBB, CCC, DDD Set AAA = CreateObject("Scripting.FileSystemObject") Set BBB = AAA.GetFolder("対象フォルダ名") Set CCC = BBB.Files A = CCC.Count If A > 0 Then ReDim SSS(A, 5) B = 0 For Each DDD In CCC B = B + 1 SSS(B, 1) = B SSS(B, 2) = DDD.Path SSS(B, 3) = DDD.Name SSS(B, 4) = DDD.Size ×SSS(B, 5) = DDD.LastRefreshed Next End If End Sub

専門家に質問してみよう