运行后,C ++打开文件似乎破坏了文件

时间:2014-10-15 17:23:11

标签: c++ fstream

简单地说,我双击文件中的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. 
}

4 个答案:

答案 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文件上执行此操作一样。因此,如果您不希望这种情况发生,您总是希望打开读取模式的流