電子書籍の厳選無料作品が豊富!

現在私は ボーランドのターボCを使用しプログラムをしています。

そこで質問なんですが、ファイル名を9文字以上にすると作成されたファイル名が9文字全部にならず
最初の8文字しかファイル名になっていません。

以下のプログラムとなっております。


char fname[128];
FILE *fp;
sprintf(fname,"abcdefghijk.csv");

fp = fopne(fname,"w");

fclose(fp);

上記を実行すると生成されたファイル名が abcdefghijk.csvではなくabcdefgh,csvとなります

ではよろしくお願いします。

A 回答 (5件)

追記。



当然だけど、MS-DOS時代のTurbo CからはAPI関数は呼べないので、API関数を呼ぶライブラリを、アセンブラなどの他の言語で作成して、外部ライブラリとして呼び出ししないといけません。

なので、対象ファイルを「dir /X」で表示して、短いファイル名がどういうファイル名になるのか調べて、短いファイル名をfopenに指定した方が早いです。
    • good
    • 0

古いTurbo Cは、ロングファイル名は未対応です。



8+3を超えるロングファイル名をfopenで指定してファイル作成すると、必ず、8+3のショートファイル名になります。

ファイルを作成するモードでは「ロングファイル名のファイルを作るのは不可能」ですので、ご注意を。

なお、ロングファイル名の既存ファイルをfopenする場合は、ロングファイル名からショートファイル名に変換する必要があります。

例えば「ABCDEFGHIJ.TXT」なら、OSのAPI関数で「ショートファイル名への変換」を行って、8+3の短いファイル名を取得して、それを指定しないといけません。

マイドキュメントのあるフォルダで、コマンドプロンプトで「DIR /X」ってやってみましょう。

2013/06/27 14:51  <DIR>             .
2013/06/27 14:51  <DIR>             ..
2013/06/27 14:51  <DIR>     FAVORI~1  Favorites
2013/06/27 14:51  <DIR>     MYDOCU~1 My Documents
2013/06/27 14:51  <DIR>             WINDOWS
2013/06/27 14:51  <DIR>     スター~1   スタート メニュー
2013/06/27 14:51  <DIR>     デスク~1   デスクトップ

と言う表示になります。

この表示の「FAVORI~1」とか「MYDOCU~1」が「短いファイル名」です。

この変換は「単純に~1が付くだけじゃない」ので、API関数を使って、正当な方法で変換しないといけません。
    • good
    • 0

こっちじゃ駄目ですか?



「Borland C++ Compiler 5.5」無償版 提供 エンバカデロ
http://www.embarcadero.com/jp/products/cbuilder/ …
    • good
    • 0

MS-DOS時代のコンパイラなので、ファイルもファイル名8文字+拡張子3文字のファイル名にしか対応していません。

    • good
    • 0

> 現在私は ボーランドのターボCを使用しプログラムをしています。



古いので、互換性のためにショートファイルネームでファイル作成するって事では。

MS-DOSで長いファイル名作られたら、他のファイルを壊したり、削除できないファイルになったりって事故が起き得るし。
Windowsなんか存在しない時代のものなら、そういう事を想定して作るのは無理だし。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!