简单地说,我双击文件中的image1然后打开它。我运行下面的代码打开image1,没有任何东西出现。所以我再次使用image1进入文件,双击它,Windows照片查看器说,“Windows照片查看器无法显示此图片,因为文件是空的。”我用另外两个测试图像做了这个,同样的事情正在发生。没有什么重要的东西丢失,但这种方法似乎正在删除它试图打开的文件,我很好奇为什么以及如何解决它。
#include <iostream>
#include <fstream>
#include <chrono>
#include <thread>
void main()
{
std::ofstream imagetest;
imagetest.open("C:\\Users\\Filepath\\image1.jpg");
std::chrono::milliseconds dura(2000);
std::this_thread::sleep_for(dura);//Kept the sleep in because I didn't know if having the console up would affect the file/image from opening.
}
答案 0 :(得分:4)
C ++的级别低于脚本。开放并不意味着开始。 您必须使用START C:\ Users \ Filepath \ image1.jpg执行批处理脚本。 或者在C ++中学习更多的库...
答案 1 :(得分:3)
ofstream
代表“输出文件流”。除了创建不存在的文件外,它还会擦除存在的文件的内容。因此,您要打开现有文件进行编写,并在此过程中清除其内容。你可能想要ifstream
,“输入文件流”来阅读。
如果要在启动默认Windows应用程序以读取文件的意义上“打开”文件,可以通过start
使用Windows system
命令:
system("start \"C:\\Users\\Filepath\\image1.jpg\"");
或Windows ShellExecute
API:
#include <windows.h>
ShellExecute(
NULL,
"open",
"C:\\Users\\Filepath\\image1.jpg",
NULL,
NULL,
SW_SHOWNORMAL
);
答案 2 :(得分:2)
首先,
std::ofstream imagetest;
正在使用内核打开文件来读取文件数据。 这可能是因为打开&#34;打开&#34;当你在windows中双击它时
如果您想让Windows打开图像以便使用默认应用程序查看,那么您需要一个不同的方法调用,因为ofstream.open不是您想要的。
尝试:
http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153(v=vs.85).aspx
ShellExecute(NULL,"open","C:\\Users\\Filepath\\image1.jpg",NULL,NULL,SW_SHOW);
答案 3 :(得分:0)
如果您为WRITE打开文件流,那么它将擦除该文件的所有内容,就像您在txt文件上执行此操作一样。因此,如果您不希望这种情况发生,您总是希望打开读取模式的流