
Visual C++ 2008 Express Editionを使ってプログラムを書いています。
ネットワークHDDから連番になっているファイルを読み込みたいのですが、
どうすればいいでしょうか?
現状は、for文で (char) filename[100]という変数にファイルパス付の連番のファイル名
(\\\\IPアドレス\\フォルダ名\\ファイル名)を次々に代入して、
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;
}
という形で読み込みをすると、file open errorとなってしまいます。
コード1行目のfilenameのところを"\\\\IPアドレス\\フォルダ名\\ファイル名"とすると
読み込みできるのですが、上のコードだと読み込むことができません。
(char)に代入したことで\がファイルパスを指定するものとして認識されていないのかな、
と思って調べているのですが、経験も浅いので解決策がわからず、困っています。
初心者の未熟者ですが、ご教示よろしくお願いします。
No.3ベストアンサー
- 回答日時:
>ちなみに下のコードで出てくるfilename018.txtというファイルには、一行ごとに
>\\\\192.168.○○.○○\\018\\0001.tif
外部ファイルから読んだり、キーボードなどからファイル名を入力する場合は
'\'を"\\"にエスケープする必要はありませんが…
_sopen_s()の戻り値はどうだったのでしょうか?
192.168.○○.○○のマシンでWindowsのファイル共有は正しく動作しているのでしょうか?
No.4
- 回答日時:
ファイル名を読み込むテキストファイル内の
"\\\\IPアドレス\\フォルダ名\\ファイル名"
を
"\\IPアドレス\フォルダ名\ファイル名"
に変えて実行すれば?
\ を \\ にするのはソースコード中に記載する場合などコンパイラーへの指示です。データとして読み込む場合は必要ないでしょう。
連絡遅くなりました。
ご指摘の通り、テキストファイル内の"\\\\IPアドレス\\フォルダ名\\ファイル名" を
"\\IPアドレス\フォルダ名\ファイル名" に変えて実行したら出来ました!
助かりました。これで解析が進みます。ありがとうございました!!
No.2
- 回答日時:
>>(\\\\IPアドレス\\フォルダ名\\ファイル名)を次々に代入して、
そのコードが記載されていないので確証ありませんがこの部分がうまくいっていない気がします..
どのように書いてます?
この回答への補足
すぐに回答くださり、ありがとうございます。
説明不足ですみません。
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にファイル名を格納している部分が書かれていないので、正しく格納されているのかどうかもわかりません。この回答への補足
すぐに回答くださり、ありがとうございます。
説明不足ですみません。
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/06 13:01
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- XML エクセルのマクロについて教えてください。 3 2023/02/06 09:06
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/09 10:33
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドプロンプトの「%1」と...
-
ExcelVBAのDirでスペース含むフ...
-
サブフォルダからファイルをコ...
-
.batでファイル名から抽出して...
-
access,vbaでフォルダ内のファ...
-
コマンドプロンプトで変数が数...
-
ファイル名の頭5桁と同名のフォ...
-
DOSのバッチ作成について‐FORの...
-
バッチファイルの繰り返し処理...
-
バッチ処理で16進数でファイル...
-
コマンドプロンプトでファイル...
-
大量のフォルダからひとつのフ...
-
コマンドプロンプトのエラーに...
-
隠しファイルの扱い
-
アクセス 壊れた? 「ファイ...
-
binファイルを解凍したいの...
-
バッチでテキストファイルから...
-
これってパソコンの最適化が完...
-
Thunderbirdで社内共有フォルダ...
-
[teraterm] waitコマンドで停止...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトの「%1」と...
-
バッチファイルで、iniファイル...
-
コマンドプロンプトでファイル...
-
ftp処理でmove(移動)を行いたい
-
コマンドプロンプトで変数が数...
-
ExcelVBAのDirでスペース含むフ...
-
[DOS] コピー先に同じファイル...
-
ファイル名の頭5桁と同名のフォ...
-
サブフォルダからファイルをコ...
-
フォルダ内の更新日時が一番新...
-
.batでファイル名から抽出して...
-
バッチファイルで同一フォルダ...
-
access,vbaでフォルダ内のファ...
-
バッチコマンドでファイル名の...
-
Windowsコマンドプロンプトで、...
-
スタートアップのファイルをバ...
-
ファイル名に ” を使うと エク...
-
ファイル名を該当フォルダ内か...
-
aタグのhrefにネットワークパス...
-
【DOSバッチ開発】末尾のタブの...
おすすめ情報