点文件(例如.htaccess
.gitignore
和.config
)是否有文件扩展名且没有文件名,或者它们被认为是文件名而没有扩展名?
我正在尝试在PHP中实现一些实用程序函数,这是因为做错事而臭名昭着,我注意到PHP的pathinfo
函数认为dotfiles有文件扩展名而没有文件名,而节点的{{1}认为dotfiles有一个文件名而没有扩展名。
我不清楚标准是否存在,或者这是否等于开发人员偏好。
答案 0 :(得分:19)
你支付了你的钱并且你接受了你的选择:是的,不,也许。
归结为您对'扩展'的定义。
请记住,SCCS文件使用前缀s.
(除此之外;您还会看到p.
文件 - 并且有许多带有其他前缀的临时文件名)。 SCCS文件s.something
是否具有扩展名或前缀? (使用s.source.c
,它是相当简单的;有前缀,名称和扩展名或后缀,或者您可以忽略前缀作为特例,名称为s.source
并且扩展名为.c
。)默认的可执行文件名a.out
怎么样?如..dot
之类的名称怎么样;它有扩展吗?如果有,它是什么?
请注意,DOS上的答案更为正式。在那里,文件系统用于强制执行(一个又一个千年左右)名称,并且扩展名是有形的。但这大部分时间过去了(并且很少有人想念它)。
Anthony Arnold和paxdiablo都注意到存在以.tar.gz
结尾的名称 - 这些文件的扩展名是什么?
如果您将somecode-8.76.tar.gz
的扩展名视为除.gz
之外的其他内容,那么您就可以自己打开一个包含“蠕虫”的包。包含的文件是somecode-8.76.tar
;这本身可以合理地说是.tar
的延伸。将整个gzipped tar文件的扩展名定义为.tar.gz
会引发问题"为什么不是.76.tar.gz
"并且还意味着您需要重新访问SCCS文件命名约定。将名称的.76
部分吸引到.76.tar.gz
或.76.tar
作为后缀会使生活变得复杂。这是一个有效的问题,但除了"扩展名以外的任何内容都是从最后一个点到名称末尾的字符串"确实很充实 - 或者需要解释扩展的含义,并进入另一个通常最好避免的复杂领域。
请注意,O / S或文件系统级别的Unix并不关心文件的扩展名。程序可以决定他们关心扩展,但这取决于程序。扩展名是文件类型的指示符;它不是确定的。这就是file
程序存在以识别文件内容的原因。它查看文件的内容以识别内容;它没有注意文件扩展名(所以它也不必决定扩展名是什么)。
答案 1 :(得分:3)
我觉得我必须给出解决用户实际问题的答案。
在这种情况下,您实际需要扩展名是什么? import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
public class Hex {
public static void binaryToHex(InputStream is, OutputStream os) {
Writer writer = new BufferedWriter(new OutputStreamWriter(os));
try {
int value;
while ((value = is.read()) != -1) {
writer.write(String.format("%02X", value));
}
writer.flush();
} catch (IOException e) {
System.err.println("An error occurred");
}
}
public static void hexToBinary(InputStream is, OutputStream os) {
Reader reader = new BufferedReader(new InputStreamReader(is));
try {
char buffer[] = new char[2];
while (reader.read(buffer) != -1) {
os.write((Character.digit(buffer[0], 16) << 4)
+ Character.digit(buffer[1], 16));
}
} catch (IOException e) {
System.err.println("An error occurred");
}
}
}
,.gitignore
等文件与文件的全名匹配。不是&#34;扩展&#34; (或缺少)但全名。
我会争辩说要取消任何文件扩展名的检查,并检查文件的名称。例如,在PHP中:
.htaccess
答案 2 :(得分:3)
我说他们只是隐藏 ...在Unix / Linux中,如果文件/目录的第一个字符是“。”,则认为文件/目录是隐藏。 (点),所以它只是第一个字符 - 不是扩展名/后缀。
此外,目录也可以隐藏 - 包括“。”和“..”(当前和父)目录 - 和扩展名/后缀通常不是我们与目录关联的东西。实际上,许多程序为自己创建了这样的隐藏目录(例如.foo),而不仅仅是一个文件(例如.foorc)。
最后,Unix / Linux从来都不关心后缀 - 大多数程序都能读取“他们的”文件,而不会在其中转发。相反,Unix经常使用来自“magic”文件(/ etc / magic)和file
命令的测试来阻止文件类型。 (值得注意的例外是压缩程序,如gzip
和bzip2
,它用带后缀的压缩版本替换原始文件。)
我想补充一点,“rc”-ending(对于“run-command”) - 例如.bashrc,.wgetrc,.zshrc等等,可以被认为是这些类型的后缀/扩展名文件 - 事件虽然名称和后缀之间没有点(有些 - 像.rtorrent.rc - 实际上有一个点)。