我曾经使用func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
if(velocity.y>0){
if Device.IS_3_5_INCHES() {
self.topConstraint.constant = -100
}
if Device.IS_4_INCHES() {
self.topConstraint.constant = -70
}
if Device.IS_4_7_INCHES() {
self.topConstraint.constant = 0
}
if Device.IS_5_5_INCHES() {
self.topConstraint.constant = 0
}
}else{
self.topConstraint.constant = 50
}
}
来阅读压缩文本文件。但是,这次我需要读取压缩二进制文件。我尝试popen(("zcat " + filename).c_str(), "r")
但它失败了,因为返回值为NULL,即使该文件确实存在。
我可以知道为什么失败了吗?我可以保证文件名已正确定义,没有特殊字符,文件确实存在。当我读取压缩文本文件时,类似的方式有效。
我可以知道这样做的正确方法是什么?
答案 0 :(得分:2)
"rb"
不是popen
的有效模式。如果您阅读the man page for popen
,就会看到它:
FILE *popen(const char *command, const char *type);
[...]
type
参数是一个指向以null结尾的字符串的指针,该字符串必须包含用于阅读的字母'r'
或用于书写的字母'w'
。[...]
如果你看the POSIX documentation for fopen
,它会说(关于模式字符串):
字符
'b'
不起作用,但允许符合ISO C标准。
因此,在POSIX-ish系统(如Linux)上,打开文件时不需要指定二进制模式,尤其是在使用popen
时。您从FILE*
返回的任何popen
将始终以二进制模式打开。
如果您决定使用zlib而不是popen("zcat", ...)
(正如其他建议,我可能会推荐),那里有很多很好的文档,而且我个人认为zpipe.c
演示非常有用。