我有一个人们可以上传文件的服务器.问题是某些文件名被破坏(没有任何扩展名),所以我无法立即确定文件类型.这个问题是两部分:对于有文件名的文件,确定它是否是图像的最佳方法是什么?(只是一个很长的if/else if列表?)其次,对于没有扩展名的文件,我如何确定它们是否是图像?
我正在编写一个文件观察器,并且由于某种原因无法获取文件信息,为什么?
struct stat info;
int fd = open(path, O_EVTONLY);
if (fd <= 0){
exit(-1);
}
int result = fstat(fd, &info);
if (!result){
exit(-1); //This happens! Errno says "No such file or directory" but that cant be because open would've failed
}
Run Code Online (Sandbox Code Playgroud)
extern "C" {
typedef struct Pair_s {
char *first;
char *second;
} Pair;
typedef struct PairOfPairs_s {
Pair *first;
Pair *second;
} PairOfPairs;
}
Pair pairs[] = {
{"foo", "bar"}, //this is fine
{"bar", "baz"}
};
PairOfPairs pops[] = {
{{"foo", "bar"}, {"bar", "baz"}}, //How can i create an equivalent of this NEATLY
{&pairs[0], &pairs[1]} //this is not considered neat (imagine trying to read a list of 30 of these)
};
Run Code Online (Sandbox Code Playgroud)
我怎样才能实现上面的样式声明语义?
我想在调用父构造函数之前进行一些处理.以下示例说明了为什么我要这样做,尽管为了清楚起见我已经做了一些微不足道的事情.真正的父构造函数正在进行一些渲染,但我们首先尝试解决这个问题.
本质上,当父构造函数调用overriden函数但子项的数据尚未设置时,问题就出现了.我该如何解决?
class BaseClass {
public:
int myNumber;
BaseClass(){
myNumber = 0;
this->printNumber();
}
virtual void printNumber(){
printf("My number is %d\n", this->myNumber);
}
}
class ChildClass : BaseClass {
public:
float childNumber;
ChildClass(float myNumber) : BaseClass() {
this->childNumber = myNumber;
}
void printNumber(){
printf("My number is %f\n", this->childNumber);
}
}
Run Code Online (Sandbox Code Playgroud) 该程序由g ++编译,带有-g标志,-static-libgcc和-static-libstdc ++.没有包含优化标志.出于某种原因,我不能进入主要的.为什么?
$ nm -C test.exe | grep main 006c05b0 T __getmainargs 006b0ad0 T __main 0088d0e8 B __mingw_winmain_hInstance 0088d0e4 B __mingw_winmain_lpCmdLine 0088d0ec B __mingw_winmain_nShowCmd 006ce518 D __native_dllmain_reason 00401180 t __tmainCRTStartup 0088edc8 I _imp____getmainargs 007491c0 r jisx0213_to_ucs_main 00405f0c T main 00401570 T mainCRTStartup 00884010 b mainret 004a3371 T sqlite3_backup_remaining 0078ada0 r uhc_1_2charset_main 0078c440 r uhc_1_2uni_main_page81 007899a0 r uhc_2_2charset_main 0078db00 r uhc_2_2uni_main_pagea1 $ gdb test.exe GNU gdb (pcx32) 7.3.50.20111127-cvs Copyright (C) 2011 Free Software Foundation, Inc. License GPLv3+: GNU GPL version …
这是PHP代码:
var_dump($value);
Run Code Online (Sandbox Code Playgroud)
string(103) "0e0cU\0Z‚dddd.is.moar.awesome‚A6A32C2074B787893DF506F6F466F5919516C44F3"
Run Code Online (Sandbox Code Playgroud)
var_dump(explode(',', $value));
Run Code Online (Sandbox Code Playgroud)
array(1) {
[0]=>
string(103) "0e0cU\0Z‚dddd.is.moar.awesome‚A6A32C2074B787893DF506F6F466F5919516C44F3"
}
为什么不在逗号上拆分字符串?
我想使用驱动器序列号+分区偏移量+分区大小来创建自己的卷ID,但是我需要知道如何在OS X上获取分区信息。我(成功地)尝试了以下操作:
int fd;
if ((fd = open("/dev/disk0s1", O_RDONLY|O_NONBLOCK)) >= 0) {
struct hd_geometry geom;
if (ioctl(fd, 0x0301, &geom) == 0){ //0x0301 is HDIO_GETGEO
printf("Index = %u\n", geom.start);
}
close(fd);
}
Run Code Online (Sandbox Code Playgroud)
但是,即使是成功的,这是因为作为一个有缺陷的解决此指出:hd_geometry.start是一个无符号长,“将不包含在大小的磁盘超过219千兆有意义的价值。” 此外,我相信它需要管理权限,这也是不好的。还有其他方法吗?
我有一个包含一组翻译的表,我想查询插入的翻译的原始表(如果存在翻译).例如:
CREATE TABLE foo (
id TEXT,
key TEXT
);
CREATE TABLE translations (
key TEXT,
value TEXT
);
INSERT INTO foo(id, key) VALUES('1', '1');
INSERT INTO foo(id, key) VALUES('2', '2');
INSERT INTO foo(id, key) VALUES('3', '5');
INSERT INTO foo(id, key) VALUES('4', '6');
INSERT INTO translations(key, value) VALUES('5', '7');
INSERT INTO translations(key, value) VALUES('6', '8');
我想要一个查询来返回表:
1 1 2 2 3 7 4 8
SQLfiddle:http://sqlfiddle.com/#!7/ee8cc
谢谢!
给定文件的句柄(例如C:\\FolderA\\file.txt),我想要一个函数,它将句柄返回到包含目录(在前面的示例中,它将是一个句柄到C:\\FolderA)。例如:
HANDLE hFile = CreateFileA(
"C:\\FolderA\\file.txt",
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
HANDLE hDirectory = somefunc(hFile);
Run Code Online (Sandbox Code Playgroud)
可能的实现someFunc:
HANDLE someFunc(HANDLE h)
{
char *path = getPath(h); // "C:\\FolderA\\file.txt"
char *parent = getParentPath(path); // "C:\\FolderA"
HANDLE hFile = CreateFileA(
parent,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
free(parent);
free(path);
return hFile;
}
Run Code Online (Sandbox Code Playgroud)
但是有没有一种方法可以someFunc在getParentPath不查看字符串并删除最后一个目录分隔符之后的所有内容的情况下实现(因为从性能的角度来看这很糟糕)?
我有一个函数如下:
void utf8_trim_end(char *data, int length){
int bytecount = 1;
int idx = length;
char *current = data;
for (int i = 0; i < length; i += bytecount){
if (!iswhitespace(&data[i])){
idx = i;
}
bytecount = utf8_bytecount(&data[i], length-i);
}
data[idx] = 0;
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,为了确保我们查看多字节字符的开头,我们从头开始并迭代。这可行,但对于长字符串来说速度很慢。我想知道是否有一种可接受的方法从最后开始并从那里向后工作?(另外,不想找图书馆,想自己做)