• 締切済み

同じファイル名なのに同じと判定しない

重複データを削除するために、有名どころであるFileManyというフリーソフトを使っているのですが、同じファイル名なのに同じと判定しないことがあります。 エクスプローラーや別の同様なアプリでは同じ名前と判定します。 人の目で見ても当然同じファイル名です。 フォルダ階層も深くないですし、ファイル数も1個で比較してもダメです。 プログラムのコードは知りませんが、普通に考えて、パスからファイル名を抜き出し、if文で比較しているだけだと想像します。 ほぼ正しく動くのに、例外的に動かないことが(バグ)あると困りますよね。 なぜこんなことが起きてしまうのでしょうか?

  • gennya
  • お礼率90% (1050/1160)

みんなの回答

  • nowaver
  • ベストアンサー率22% (314/1370)
回答No.1

>プログラムのコードは知りませんが、普通に考えて、パスからファイル名を抜き出し、if文で比較しているだけだと想像します。 想像で批判しないでください。 https://forest.watch.impress.co.jp/library/software/filemany/ "ファイルサイズやハッシュ値を比較して、指定したフォルダ内にある重複ファイルを検索し、一括して削除できる。" とあるようにファイル名だけでなく、中身も同じかどうかを判定しています。同じファイル名でも内容が同じではないファイルを同じと誤判定しないようにしてくれています。 >ほぼ正しく動くのに、例外的に動かないことが(バグ)あると困りますよね。 バグではないので困りません。有用です。 >なぜこんなことが起きてしまうのでしょうか? 原因は使用者の理解不足です。

gennya
質問者

お礼

回答ありがとうございました。 当然、使用方法を理解したうえで、名前だけの比較で判定しています。

関連するQ&A

  • ファイル名が決まっていないファイルのデータを取り出しひとつのファイルにまとめる

    初めまして。 マクロ超初心者です。まだまだ勉強中でして自分で作るのは困難です。しかし、来月には必要なので… よろしくお願いします! エクセル2000で以下のマクロを作成したいです。 1.フォルダ内のCSVファイルを開き、中のデータをひとつにまとめる。 (フォルダ名とファイル名、ファイル数はその時によって変わってきます。ファイル数はだいたい10個くらいです。ひとつのデータは20列50行くらいで列の項目を基準にまとめたいです。) 2.列を1列目に挿入し、2列目と3列目のデータを1列目に統合する。 3.1列目のデータを使用し、重複を調べる。重複がある場合はどちらかひとつを削除する。(できれば4列目のデータを比較し数値が少ないほうを削除したいです。) ファイルを開くところまでは検索して探し当てたのですが、ファイル名が決まっていないことが難しく詰まってしまいます。 Sub OpenAllBooks() Dim filename As String Dim openedbook As Workbook Dim isbookopen As Boolean filename = Dir(ThisWorkbook.Path & "\*.csv") Do While filename <> "" isbookopen = False For Each openedbook In Workbooks If openedbook.Name = filename Then isbookopen = True Exit For End If Next If isbookopen = False Then Workbooks.Open (ThisWorkbook.Path & "\" & filename) End If filename = Dir() Loop End Sub 詳しい方よろしくお願いします!

  • エクスプローラ風の階層構造

    Windowsエクスプローラのように、フォルダやファイルなどの情報をDBで管理したいと思っています。 No.99167の質問を参考にさせていただいて、フォルダコード・階層・フォルダ名・サブフォルダ名を項目名としてもたせて作成しています。 同じ階層に同じ名前のフォルダがいくつも存在している場合(上の階層以外、各パスも同じだった場合を想定)で、その中の1つのフォルダだけを削除した場合、削除するフォルダの下の階層のフォルダやファイルだけを一緒に削除することができないのです。 多くのケースを考えると、項目に何かを足さなければならない気がするのですが、わかりません。 (これはWeb上で管理することを考えています。)

  • ファイル名を取得できない

    次のようなソースでディレクトリ内のファイル名を取得しようとしています。 $dh=opendir("."); while(($entry=readdir($dh))){ if(is_file($entry)){ print $entry."<>"; } } closedir($dh); このソースを、取得したいディレクトリ内で動かすとまったく問題ないのですが、ディレクトリのパスを1個上の階層などから相対パスで指定すると、.phpファイルと.htmlファイルは取得するのですが、ほかのファイル名は取得されなくなってしまいます。 何かphp.iniなどで設定があるのでしょうか。 回避方法がありましたら是非ご教授ください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • ファイル名の取得について

    フォルダAとフォルダBに同じ名前のファイルが存在するか調べるPRGを考えています。 私の今までのやり方だと、フォルダからファイル名を一つづつ取り出し、その都度ファイル名が同じか判断していました。 しかし、この方法だとファイルが多いと時間が掛かると思われるため、最初にフォルダにあるファイル名をすべて取り出し、その後一つづつファイル名を比較しようと考えています。 この最初にファイル名をすべて取り出し、配列に代入する方法がよく判りません。 というか、配列に入れれば良いかもよく判りません。 ということで、簡単なコードなり、ヒントなり、参考になるサイトなり教えていただけるとありがたいです。

  • 新規作成ファイルパスが有効か無効か判定したい

    こんにちは。 VC++を使用してWindows上で動作するプログラムを作成しているのですが、ユーザに絶対パスをテキストで入力させ、そのパスが存在しなければ、フォルダとファイルを新規作成するかどうか問い合わせるという処理を行いたいと考えています。  そこで質問なのですが、 ・有効なパス設定で存在しないフォルダ ・無効なパス 上記を判定したいのですが、現状区別が付けられないでいます。実際には、以下のように処理しています。 OutputFilename:CString型、絶対パス(ファイル名含む)が入っている。 OutputPath:CString型、絶対パス(上記から「\ファイル名」を除いたもの) // 出力ファイルのパス存在チェック pathlen = OutputFilename.ReverseFind('\x5c'); // 最後の\記号までの文字数を取得 if(pathlen == -1) return -1; // エラー OutputPath = OutputFilename.GetBufferSetLength(pathlen); nRcd = _chdir(OutputPath); if(nRcd){ if(errno == ENOENT) return -1; ※ } ※無効なパス(例えばabc\bcd\efgなど)であっても、存在しないパス(例えばC:\tempは存在し、その配下には存在しないフォルダ名を指定-C:\temp\abc\def)であっても、同様に_chdir関数が失敗し、errnoにENOENTが入るようです。 どなたかご存知の方がおられましたら、どうかご教授お願いいたします。

  • ファイル名だけを取り出す方法

    WindowsXP Office2003 下記のようにフォルダ分けされ保存しているファイルがあります。 数ある階層のフォルダを無視し、そのファイル名だけを取り出してExcelのデータベースにしたいのですができるでしょうか? できれば特殊なソフトなどを使わない方法を知りたいです。  大分類フォルダ1  |___中分類フォルダ1  |    |________ファイル名1  |    |  |    |________ファイル名2  |  |___中分類フォルダ2  |    |________ファイル名3  |    |  |    |________ファイル名4  |  |  大分類フォルダ2  |___中分類フォルダ1  |    |________ファイル名5  | ~~~~~~~~~~~~~~~~~~~~~~~~~~~        ファイル名1  ファイル名2  ファイル名3  ファイル名4  ファイル名5  ~~~

  • Batファイルについて教えてください。

    再度質問を出します。宜しくお願いします。 複数階層にまたがっているエクセルファイルをBatファイルでコピー、又は、移動させたいのです。コピー、移動させたいファイルはファイル名の頭(重複しないIDになっている)を拾ってリストにしてあります。エクセルファイルが複数のフォルダに入っているので、最上階層のフォルダでbatファイルを実行できればと思っていますが。

  • ファイル名を検索して末尾に半角括弧で囲まれた数字が

    階層構造すべてのフォルダに有るファイル名(含フォルダ名)を検索して末尾に半角括弧で囲まれた数字が有る場合、そのファイル(含フォルダ)を削除したいのですが、エクスプローラではうまくいきません。 DOSプロンプトでやったらどうかと思い検索したのですが、私の探し方が下手なのか、見付けられませんでした。 何千個・何万個とあるファイルをイチイチ確認して削除するのは大変なので、良い方法をご存じの方が居ましたら是非お教え下さい。よろしくお願いします。

  • ファイル名のわからない複数のファイルをひとつにまとめる

    エクセル2000で以下のマクロを作成したいです。 1.フォルダ内のCSVファイルを開き、中のデータをひとつにまとめる。 (フォルダ名とファイル名、ファイル数はその時によって変わってきます。ファイル数はだいたい10個くらいです。ひとつのデータは20列50行くらいで列の項目を基準にまとめたいです。) 2.列を1列目に挿入し、2列目と3列目のデータを1列目に統合する。 3.1列目のデータを使用し、重複を調べる。重複がある場合はどちらかひとつを削除する。(できれば4列目のデータを比較し数値が少ないほうを削除したいです。) まだ途中までですが、マクロ作成してみました。 わたしとしては、フォルダ内のCSVファイルを開いてセルA1からデータの入った範囲をコピーし、testエクセルファイルのアクティブセルに貼り付け ↓↓↓ 次のファイルのデータをその下に貼り付けたいのでtestファイルのデータが入ったセルの下を選択し、ファイルを開くへ繰り返し。 のつもりなのですが…、うまく作動しません。 マクロのテキストを片手にネットでも検索しながら作ったのですが、まだ記述の仕方などがわかってなくどこがおかしいのかもわかりません。 わかる方がいたらよろしくお願いします! ----------------------------------- Sub ファイルのデータを統合() Dim filename As String Dim openedbook As Workbook Dim isbookopen As Boolean Dim myworksheet As Worksheets Dim myrange As Range filename = Dir(ThisWorkbook.Path & "\*.csv") Do While filename <> "" isbookopen = False For Each openedbook In Workbooks If openedbook.Name = filename Then isbookopen = True Exit For End If Next Range("A1").CurrentRegion.Copy Destination:=Workbooks("test.xls").Worksheets("sheet1").ActiveCell Workbooks("test.xls").Worksheets("sheet1").Range("A1").End(xlDown).Offset(1).Select If isbookopen = False Then Workbooks.Open (ThisWorkbook.Path & "\" & filename) End If filename = Dir() Loop End Sub

  • 特定のファイルを複数のフォルダに一括コピーする

    添付画像に記したような階層のフォルダがあり、第三階層すべてのフォルダへ一つのファイルをコピーしたいと思っています。 各フォルダのパスのリストが作れれば解決しそうですが、色々試してみたもののリスト作成からうまくいきませんでした。 なにか良い方法などありましたらご教示ください。 よろしくお願いいたします。  ・第三階層のフォルダリストを作りたい  ・第三階層のフォルダすべて合わせると数百になるので一括でコピーしたい  ・第二、第三階層のフォルダ名はすべて異なる

専門家に質問してみよう