• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Visual C++ 2008 Express Editionを使って)

C++でネットワークHDDから連番のファイルを読み込む方法

このQ&Aのポイント
  • C++のVisual C++ 2008 Express Editionを使用して、ネットワークHDDから連番のファイルを読み込む方法を教えてください。
  • 現在、ファイルパス付きの連番のファイル名をforループで読み込もうとしていますが、エラーが発生しています。
  • ファイルパスを文字列変数に代入するとエラーが発生するため、解決策を教えてください。

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

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.3

>ちなみに下のコードで出てくるfilename018.txtというファイルには、一行ごとに >\\\\192.168.○○.○○\\018\\0001.tif 外部ファイルから読んだり、キーボードなどからファイル名を入力する場合は '\'を"\\"にエスケープする必要はありませんが… _sopen_s()の戻り値はどうだったのでしょうか? 192.168.○○.○○のマシンでWindowsのファイル共有は正しく動作しているのでしょうか?

sanysideup
質問者

お礼

連絡遅くなりました。 \を\\にエスケープせずにやったら出来ました! 助かりました!!ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • yuipu
  • ベストアンサー率38% (18/47)
回答No.4

ファイル名を読み込むテキストファイル内の "\\\\IPアドレス\\フォルダ名\\ファイル名" を "\\IPアドレス\フォルダ名\ファイル名" に変えて実行すれば? \ を \\ にするのはソースコード中に記載する場合などコンパイラーへの指示です。データとして読み込む場合は必要ないでしょう。

sanysideup
質問者

お礼

連絡遅くなりました。 ご指摘の通り、テキストファイル内の"\\\\IPアドレス\\フォルダ名\\ファイル名" を "\\IPアドレス\フォルダ名\ファイル名" に変えて実行したら出来ました! 助かりました。これで解析が進みます。ありがとうございました!!

すると、全ての回答が全文表示されます。
  • yuipu
  • ベストアンサー率38% (18/47)
回答No.2

>>(\\\\IPアドレス\\フォルダ名\\ファイル名)を次々に代入して、 そのコードが記載されていないので確証ありませんがこの部分がうまくいっていない気がします.. どのように書いてます?

sanysideup
質問者

補足

すぐに回答くださり、ありがとうございます。 説明不足ですみません。 filenameにファイル名を格納するのは以下のコードで行っています。 ちなみに下のコードで出てくるfilename018.txtというファイルには、一行ごとに \\\\192.168.○○.○○\\018\\0001.tif ・ ・ ・ \\\\192.168.○○.○○\\018\\6400.tif のような連番のファイル名が保存されています。 (ここからコードです) FILE *fpp; errno_t err_a = fopen_s( &fpp, "C:\\Documents and Settings\\user\\My Documents\\Visual Studio 2008\\Projects\\filename_maker\\filename018.txt", "r" ); if (err_a) { printf_s( "The filename was not opened\n" ); return 1; } for (i=0;i<6400;i++) {  fscanf_s(fpp,"%s",filename,200);  printf("%s\n",filename); //★  if( _sopen_s( &fh, filename, _O_RDONLY,_SH_DENYWR,_S_IREAD) == 0 ){  filesize=_filelength( fh );  offset=filesize-MX*MY*2;  printf( "File length : %ld\n", filesize );  printf( "Offset length : %d\n", offset );  _close( fh ); } else { printf("\n file open error "); return 1; } ★で示したprintfではファイル名が正しく表示されるので、格納はできていると思うのですが・・・いかがでしょうか?

すると、全ての回答が全文表示されます。
回答No.1

 エラーの場合、_sopen_sはエラー原因をグローバル変数errnoに設定するので、それを調べてください。あと、filenameにファイル名を格納している部分が書かれていないので、正しく格納されているのかどうかもわかりません。

sanysideup
質問者

補足

すぐに回答くださり、ありがとうございます。 説明不足ですみません。 filenameにファイル名を格納するのは以下のコードで行っています。 下のコードで出てくるfilename018.txtというファイルには、一行ごとに \\\\192.168.○○.○○\\018\\0001.tif ・ ・ ・ \\\\192.168.○○.○○\\018\\6400.tif のような連番のファイル名が保存されています。 (ここからコードです) FILE *fpp; errno_t err_a = fopen_s( &fpp, "C:\\Documents and Settings\\user\\My Documents\\Visual Studio 2008\\Projects\\filename_maker\\filename018.txt", "r" ); if (err_a) { printf_s( "The filename was not opened\n" ); return 1; } //*****forでファイル読み込み、計算、強度計算結果の出力を開始******* for (i=0;i<6400;i++) { fscanf_s(fpp,"%s",filename,200);  printf("%s\n",filename); //★ if( _sopen_s( &fh, filename, _O_RDONLY,_SH_DENYWR,_S_IREAD) == 0 ){ filesize=_filelength( fh ); offset=filesize-MX*MY*2; printf( "File length : %ld\n", filesize ); printf( "Offset length : %d\n", offset ); _close( fh ); } else { printf("\n file open error "); return 1; } ★で示したprintfではファイル名が正しく表示されるので、格納はできていると思うのですが・・・。 グローバル変数errnoですね、わかりました、勉強しながら調べてみます。

すると、全ての回答が全文表示されます。

関連するQ&A