Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;在Apache下运行的CGI文件在使用ifstream时失败 我在Windows 8.1中使用以下C++代码片段作为Apache 2.4中较大的CGI程序的一部分:_C++_Apache_File Io_Cgi - Fatal编程技术网

C++;在Apache下运行的CGI文件在使用ifstream时失败 我在Windows 8.1中使用以下C++代码片段作为Apache 2.4中较大的CGI程序的一部分:

C++;在Apache下运行的CGI文件在使用ifstream时失败 我在Windows 8.1中使用以下C++代码片段作为Apache 2.4中较大的CGI程序的一部分:,c++,apache,file-io,cgi,C++,Apache,File Io,Cgi,以下措施效果良好: ifstream myfile; myfile.open("filename.txt", ifstream::in); if (myfile.is_open()) { //do stuff } 但是,我希望能够传递文件名,而不是如上所述的静态文本字符串 //Define filename as name plus extension std::string string_filename = parts[1] + "." + parts[3]; //results

以下措施效果良好:

ifstream myfile;
myfile.open("filename.txt", ifstream::in);
if (myfile.is_open())
{
   //do stuff
}
但是,我希望能够传递文件名,而不是如上所述的静态文本字符串

//Define filename as name plus extension
std::string string_filename = parts[1] + "." + parts[3];  //results in filename.extension

ifstream myfile;
myfile.open(string_filename.c_str(), ifstream::in);
if (myfile.is_open())
{
   //do stuff
}
这在Visual Studio 2013中编译,没有问题,但在通过Apache作为CGI应用程序运行时,无法创建输出或任何有用的调试信息


任何具体的帮助都将不胜感激。CGI的难点在于调试,因为程序现在已格式化为接受POST调用,而且我还没有构建适当的挂钩以方便脱机测试。

好的,我解决了这个问题。Visual Studio 2013自动为我修复了代码中的一个bug。当我在Apache中运行可执行文件时,它不再提供拐杖,程序带着内存错误退出。我正在释放指针稍后在代码中引用的内存。Visual Studio没有吐出来,但如果我在没有调试器的情况下运行,应用程序就会崩溃。

一条澄清的评论是它不会崩溃。该计划继续运作。该文件不会打开,也不会读入,但main()会继续,但是cgi脚本不再向web浏览器显示输出。什么是
部分
?您是否尝试插入调试输出以检查构造的文件名是否正确?部分[1]和[3]正在分析POST消息。我确实创建了一个调试cout来验证文件名是否正确。如果我输入一个假值,我的代码会回复说找不到该文件。因此,您还要检查该文件是否存在,这意味着
open
调用实际上有效吗?或者如何检查文件是否存在?我正在本地系统上运行它。我可以将输出字符串与cgi bin文件夹中的文件进行比较。当我以字符串“file.txt”的形式输入文件名时,代码就起作用了。当我设置filename=“file.txt”并在open调用中使用变量filename时,它不起作用。