は、いくつかの簡単なコードです名前は末尾が~
です。Cライブラリでのopendirとreaddirので隠しファイルを無視する方法
私はコマンドls
とまったく同じことをしたいと思います。どうすればいいですか?
は、いくつかの簡単なコードです名前は末尾が~
です。Cライブラリでのopendirとreaddirので隠しファイルを無視する方法
私はコマンドls
とまったく同じことをしたいと思います。どうすればいいですか?
これは正常です。 ls -a
(すべてのファイルを表示している場合、ls -A
は.
と..
を除くすべてのファイルを表示します)、同じ出力が表示されます。
.
は、それが入っているディレクトリを参照するリンクです。foo/bar/.
は同じものがfoo/bar
です。
..
は、それが入っているディレクトリの親ディレクトリを参照するリンクです。foo/bar/..
はfoo
と同じものです。
.
で始まるその他のファイルは、隠しファイルです(これは実際には何も行われませんが、これは実際の公式の隠し属性があるWindowsとは異なります)。 ~
で終わるファイルは、おそらくテキストエディタで作成されたバックアップファイルです(これは実際にははとなります)。
これらの種類のファイルを表示したくない場合は、明示的にチェックして無視する必要があります。
この現象は、ls -a
のように、と正確にはです。あなたがフィルタリングを望むなら、あなたは事実の後にそれをする必要があります。隠しファイルを排除
: "〜" で終わる隠しファイルとファイルの排除
DIR* pd = opendir(xxxx);
struct dirent *cur;
while (cur = readdir(pd)) {
if (cur->d_name[0] != '.') {
puts(cur->d_name);
}
}
:あなたが名前を処理する前に
DIR* pd = opendir(xxxx);
struct dirent *cur;
while (cur = readdir(pd)) {
if (cur->d_name[0] != '.' && cur->d_name[strlen(cur->d_name)-1] != '~') {
puts(cur->d_name);
}
}
はif (cur->d_name[0] != '.')
スティック。
UNIXの隠しファイル標準が先頭のドットで、.
と..
も一致します。
末尾の~
がバックアップファイルの標準です。これを無視するのはもう少しの作業ですが、マルチギガヘルツのCPUがそれを管理できます。 if (cur->d_name[strlen(cur->d_name)-1] == '~')
+1のようなものを使用してください。 "put(...)"の前に "if(* cur-> d_name!= '。')"というテキストを挿入するだけで、lsのデフォルトの動作が得られます。 –
@j_random_hacker:もし彼がバックアップファイルを必要としないなら、彼はまた末尾の〜をチェックする必要があります。 – Zifre
皆様、ありがとうございます!できればすべての回答を選択したいと思います。今、私はこの問題を完全に理解しています。ありがとうございました! – fwoncn