フォルダーの深さの限界

このQ&Aのポイント
  • linux上のgccを用いて計算処理を行いたい際、フォルダーの深さに制限がある
  • 計算処理を行う際、ファイルパスの階層が一段増えるとPCの動作が中断する
  • ファイルパスの階層が増えないようにすることで問題を解決できる
回答を見る
  • ベストアンサー

フォルダーの深さの限界

linux上のgccを用いて計算処理をさせるつもりです。 1.下記の動作はうまく行きました。(フォルダ名を一部伏字にしています)。 sprintf(input_file,"./w****/o*****/%d.txt",i); sprintf(output_file,"./testout/%d.txt",i); input_fileを入力し、計算処理し、output_fileに出力する。 計算しやすいようにファイル名は自然数を使います。 2. ただし、下記の動作はうまく行かないです。 sprintf(input_file,"./w****/o*****/live/%d.txt",i); sprintf(output_file,"./testout/%d.txt",i); PCの動作が中断します。 input_fileの階層が一段増えたせいなのかもしれません。 どなたか解決法を教えてください。

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

  • ベストアンサー
  • tsunji
  • ベストアンサー率20% (196/958)
回答No.3

input_fileの配列数と文字数はあってますか?

その他の回答 (2)

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.2

一応回答ついていますが、別の視点から。 >2. ただし、下記の動作はうまく行かないです。 >sprintf(input_file,"./w****/o*****/live/%d.txt",i); >sprintf(output_file,"./testout/%d.txt",i); >PCの動作が中断します。 具体的にどう「うまく行かない」んです? 動作が中断した時になにかメッセージなり出力されていませんか? んで… input_fileとoutput_fileは作成されたファイル名を格納するのに十分な領域はあるんですよね? # output_fileの方は1.と変わらないみたいですけど…。 int型が32Bitの環境だと…%dで10文字程度になる筈ですが。

  • chie65535
  • ベストアンサー率43% (8525/19378)
回答No.1

OS内部で、相対パスを絶対パスに変換する際、絶対パスの文字列の長さが「ファイルアクセス関数に依存する、一定の長さ」を超えると、ファイルのオープンに失敗します(C言語のライブラリに定義されている「MAX_PATH」の値を確認すること) >どなたか解決法を教えてください。 シンボリックリンクなどを用いて、絶対パスの長さを短くする。

関連するQ&A

  • 欠損データをgotoでスキップしたい

    番号のついたデータ群を処理するつもりです。 例えば、1から10000まで欠損が存在しなければ for文で処理できます。 ただし、番号の欠損があればそこで止まってしまいます。 番号の欠損があっても処理ができるようにしたいです。 そこで、あまり使いたくないのですがgotoの使用を検討し、 下記のプログラムを作成しました。 動作は単に1.txt から5.txtまでの入力ファイルを開いて、 標準出力に入力ファイル名を出力して、閉じるだけです。 あえて4.txtは除いてあります。 1、2、3、5となり、4が欠損しています。 gotoで4をスキップしたいのですが、うまくいきません。 どなたかやりかたを教えてください。 もし、gotoを使わずにスキップできるのであれば その手法も教えてください。 program #include <stdio.h> #include <stdlib.h> #include <math.h> int main(void){ FILE *fi,*fo; int i; for( i = 1; i <= 5; i++){ char input_file[32]; sprintf(input_file,"./testin/%d.txt",i); if((fi = fopen(input_file,"r")) == NULL){ puts("Error:cannot open input file \n"); goto label2; } printf("input_file=%s\n", input_file); label2: fclose(fi); } return 0; } inputfile ./testin/1.txt ./testin/2.txt ./testin/3.txt ./testin/5.txt ./testin/4.txtは存在しない stdoutput input_file=./testin/1.txt input_file=./testin/2.txt input_file=./testin/3.txt Error:cannot open input file 以上

  • 連番のファイルを何個も開きたい

    FILE *ab_1,*ab_2,*ab_3,*ab_4,*ab_5,*ab_6,*ab_7,*ab_8,*ab_9,*ab_10,*ab_11,*ab_12,*ab_13,*ab_14,*ab_15,*ab_16; ab_1=fopen("1.txt","w"); ab_2=fopen("2.txt","w"); ab_3=fopen("3.txt","w"); ab_4=fopen("4.txt","w"); ab_5=fopen("5.txt","w"); ・ ・ ・ ab_15=fopen("15.txt","w"); ab_16=fopen("16.txt","w"); という作業をfor文で回せるようにしたいのですがどうしたらいいでしょうか? 自分で作ってみたのは #include<stdio.h> main() { int i; char buf[256],file_name[256]; for(i=0;i<16;i++){ sprintf(buf,"ab_%d",i); sprintf(file_name,"%d.txt",i); FILE *buf; buf = fopen(file_name,"w"); } fprintf(ab_1,"test\n"); } とやってみたのですが、実際にfprintfで出力しようとするとファイルポインタ ab_1 が定義されていません。みたいなエラーが出てしまいます。 sprintfで取った文字をファイルポインタにしようとしてるところがいけないんだとは思うのですが何かいい方法はないでしょうか? 環境はWindowsXP,VC++6です。

  • ファイル名を複数個配列で確保したいときどうすればいいですか?

    先ほど似た質問をしたのですが、勘違いしていたので質問しなおさせてください。 typedef struct file{ FILE *fp; char *filename; }sFILE; sFILE fp[5]; for(i=0;i<5;i++){ fp[i].fp=NULL; sprintf(fp[i].filename,"file(%d).txt",i); } とsprintfでファイル名を確保したいんですが、 sprintf(fp[i].filename,"file(%d).txt",i); の第一引数がこれではダメなようです。 なんとなく、ダメなのは分かるんですがアドレスについてなど分からないことが多くどうしたらいいのかわかりません。 アドバイス等お願いします。

  • 3の倍数行まで1から数字を挿入し,カウントアップしていく方法

    よろしくお願いします.タイトル通り「3の倍数行まで1から数字を挿入し,カウントアップしていく方法」をテキストファイルで処理したいと思っています. 具体的にインプットとアウトプットは以下のようにしたいです. input.txt ----------------- a b c d e f g h i ・ ・ ・ ・ ・ output.txt ----------------- a,1 b,1 c,1 d,2 e,2 f,2 g,3 h,3 i,3 ・,4 ・,4 ・,4 ・,5 ・,5 perlでのファイルの読み込ませ方は理解していますので 読み込んで出力するまでの処理を教えていただけないでしょうか. よろしくお願いします.

    • ベストアンサー
    • Perl
  • 教えて!ファイルの操作

    計算結果をテキストファイルへ書き込んで出力したいです。 一つのファイルへ出力の場合、ファイル名を指定(output.txt)して、出力は出来ますが、 ループ(i:1から10まで)を使って、ループの循環と共に、(output1.txtからoutput10.txt)のように出力したいです。 ファイル名は変わりますから、上記の操作はできますでしょうか。 教えてください! お願いします。

  • Rubyでテキスト内容を別のテキストに一度に出力したいのですが、どのよ

    Rubyでテキスト内容を別のテキストに一度に出力したいのですが、どのようにすればよいのでしょうか。 rubyはさっきはじめたところです。 一通り検索しましたが、やり方がヒットしませんでした。 a.txtの内容: aaaaa bbbbb ccccc ... を、ファイルコピーではなくoutput.txtに出力したいのですが、 a = open("a.txt") o = open("output.txt",w) ??? a.close o.close で、???の部分にどのような処理を書けばよいのでしょうか。 putsやwriteで書いてみたのですが、(o.write a) #<File:0x28a4450> と出力され、(ファイルオブジェクトのアドレス?)、a.txtの内容が出力出来ませんでした。 a.xxx のようにするのかな、と予想しますが、方法は問いませんので、ご教示いただけないでしょうか。

    • ベストアンサー
    • Ruby
  • 複数テキストファイルを読み込み、複数テキストファイルの出力

    質問は100個のテキストファイル(それぞれ10個のデータを含む)を読み込み、それぞれのテキストファイルから5個ずつデータを抽出し、200個のテキストファイルとして出力するというプログラムについての質問です。 以下が僕の作ったファイル出力部分のプログラムです。 /************/ void ecg_rr(fp,data_max) FILE *fp; { int b,i=0; int c=1; char fname[64]; data[0][i]=trend_data[0][i]; for(i=0;i<100;i++) sprintf(fname,"ss[%d].txt",1+i); fp = fopen(fname,"w"); fprintf(fp,"%4d\n",c); fprintf(fp,"%8.8f\n",data[0][0]); fprintf(fp,"%8.8f\n",data[0][2]); fprintf(fp,"%8.8f\n",data[0][4]); fprintf(fp,"%8.8f\n",data[0][6]); fclose(fp); sprintf(fname,"sk[%d].txt",1+i); fp = fopen(fname,"w"); fprintf(fp,"%4d\n",c); fprintf(fp,"%8.8f\n",data[0][1]); fprintf(fp,"%8.8f\n",data[0][3]); fprintf(fp,"%8.8f\n",data[0][5]); fprintf(fp,"%8.8f\n",data[0][9]); fclose(fp); } 複数ファイルの読み込み方がわからず、自分のプログラムだと1つのテキストファイルしか読み込めないので、16_4.batを作り、その中身を 16_4 読み込むテキストファイル名1.txt ss[1] 16_4 読み込むテキストファイル名1.txt sk[1] 16_4 読み込むテキストファイル名2.txt ss[2] 16_4 読み込むテキストファイル名2.txt sk[2] ・・・ とやったのですが、うまくいきませんでした。 どうすればよいのでしょうか。

  • 指定の行数目から行を抽出する

    いつもお世話になっております. 環境はWindows XP Pro でActiveperlを使っています. Perlでしたいことは,「指定の行数目から行を抽出する」ことです. 具体的には以下のようにしたいと思っております. data.txt A B C D E F line.txt 2 4 6 output.txt B D F 先ほどある方からサンプルソースを教えてもらったのでそれをベースに作ってみましたが,出力のoutput.txtが空のままです. use strict; use warnings; use feature ':5.10'; use IO::File; open my $file2, '<', 'line.txt' or die "can't open input $!"; chomp(my @subjects = <$file2>); close $file2; open my $newfile, '>>', 'data_out.txt' or die "can't open output $!"; open my $file, '<', 'data.txt' or die "can't open input $!"; while (my $line = <$file>) { chomp $line; foreach my $line (@line) { print $line; if ($. eq $subjects){ say {$newfile} $line; } } } close $file; close $newfile; どこが間違っているのでしょうか.ご指摘ください.よろしくお願いします.

    • ベストアンサー
    • Perl
  • リストファイルに一致する個数のカウントについて

    以下にリストファイルと、インプットファイルがあります。 リストファイルのそれぞれにインプットファイルの中で何個一致するかを出力させたいです。 目的にかなうawkや perlなどのスクリプトを教えてほしいです。 list.txt a b c d ・・ input.txt 1 a b c 2 a d 3 4 b c ・・ output.txt a 2 b 2 c 2 d 1 ・・

  • [バッチファイル]指定ファイルをサブディレクトリを含み検索・処理する

    ■WindowsXP Pro SP3 ■ディレクトリ構造 カレント ├ディレクトリ1  ├サブディレクトリ1-1   ├対象ファイル1-1  ├サブディレクトリ1-2   ├対象ファイル1-2 ├ディレクトリ2  ├サブディレクトリ2-1 ・ ・ ・ このような状態で指定したファイルすべてを見つけ出し、1つ1つ処理を行っていくバッチファイルの書き方を教えて頂きたいです 具体的には、指定する対象ファイルというのがmpeg2ファイルで、そのmpeg2ファイルをすべてFFmpegを用いてmpeg1へ変換しinputと同一ディレクトリに出力するといった動作です 考えた流れはこんな感じなのですがどうにもうまく動作しなくて困っています ディレクトリ1 ディレクトリ1内のサブディレクトリ1-1 サブディレクトリ1-1内の対象ファイル1-1を見つける 見つかったときはFFmpegの処理をする FFmpegが処理し終わったら次の対象ファイルを探す FFmpegの記述は FFmpeg.exe -i "input_file" "output_file" のような感じなのでパスや相対指定を使えば理想通りの動作をすると思うのですが、いま一つ書き方がわかりません