Anonim

打开文件时,各种事情都可能出错。一个文件存在于一个物理设备上 - 例如一个固定磁盘,或者可能位于闪存驱动器或SD卡上 - 并且在使用物理设备时可能会遇到问题。

例如,部分磁盘可能已损坏,导致现有文件损坏。或者,更少的灾难性的,你可能会用完磁盘空间。或者,甚至更少的灾难性的,你可以尝试打开一个不存在的目录中的文件。

<! --1 - >

如果您尝试通过指定完整路径和文件名来打开文件进行写入,但该目录不存在,则计算机的响应方式会有所不同,具体取决于所使用的操作系统。如果您不确定您的特定操作系统如何响应,请尝试编写一个简单的测试应用程序,尝试创建并打开/ abc / def / ghi / jkl / abc之类的应用程序。文本。 (当然,你要确保使用一个不存在的目录。)

<!然后发生以下两种情况之一:目录和文件将被创建,或者什么都不会发生。

例如,在Windows系统上,如果我们尝试在不存在的目录中创建文件,系统不会创建该目录。这是因为内心深处,应用程序最终会调用一个操作系统函数来完成创建文件的肮脏工作。而这个特定的操作系统函数(它被称为CreateFile(),如果你甚至在乎)有一个规则,它不会为你创建一个目录。

如果你想确定ostream类是否无法创建文件,你可以调用它的fail()成员函数。如果对象无法创建文件,则此函数返回true。这就是当一个目录不存在时发生的情况。所示的DirectoryCheck01示例演示了一个例子。 #include #include using namespace std; int main(){ofstream outfile(“/ abc / def / ghi / MyFile.txt”);如果(outfile。fail()){cout <<“无法打开文件! << endl;返回0;} outfile <<“hi”<< endl; OUTFILE。关(); return 0;}

当你运行这段代码时,假设你的系统上没有一个名为/ abc / def / ghi的目录,你应该看到这个消息无法打开这个文件!假设您的特定操作系统在这种情况下不创建目录;如果是这样的话,你的电脑就会打开这个文件,写下你喜欢的文件,并在关闭之后继续快乐的生活。

作为调用fail()成员函数的替代方法,可以使用各种流类中可用的运算符。这是! ,这个代码被称为“bang”运算符,你可以用它来代替调用fail(),如下面代码所示:

if(!outfile){cout <<“无法打开文件! << endl;返回0;}

大多数人更喜欢使用! outfile而不是outfile。失败(),虽然! outfile会造成混淆的代码。原因是outfile是一个对象,并且这个概念是! outfile根本没有意义。其实,! outfile绊倒许多初学程序员。他们知道outfile不是这个示例代码中的指针,他们想知道如何通过0来测试它,因为通常只能使用指针。 (请记住,通过说!x,其中x是一些指针,您正在测试x对0.)而这根本没有意义!所以,为了避免混淆,只需调用fail()。这更有意义。

以下是您的文件创建可能会窒息的一些原因:

目录不存在。

您的磁盘空间不足,运气不佳。

您的应用程序没有创建文件的权限。

  • 文件名无效 - 也就是说,它包含操作系统在文件名中不允许的字符,例如*或? 。像任何好的应用程序一样,你的应用程序应该做两件事:

  • 1。

  • 检查文件创建是否成功。

  • 2。

如果文件创建失败,请适当处理。

  1. 不要只是打印一个糟糕的消息,像哎呀!中止! ,让你的穷人别无选择,只能把显示器扔到地板上。相反,做一些更友善的事情,比如提出一个消息告诉他们存在问题,并建议他们腾出更多的磁盘空间。

<Dhmies

编辑的选择

添加新的SketchUp图层并在图层之间移动实体 - 虚拟图层

添加新的SketchUp图层并在图层之间移动实体 - 虚拟图层

是SketchUp非常有用的一部分,他们可以让你的生活变得更轻松。以下是如何在Sketchup中添加新图层以及如何将实体移动到不同图层的方法。添加新图层按照以下步骤将图层添加到SketchUp文件:选择“窗口”→“图层”。图层...

全部关于地理位置快照和SketchUp - 虚拟

全部关于地理位置快照和SketchUp - 虚拟

当您将地理位置快照导入SketchUp ,您可以访问Google庞大的地理数据存储库;快照不仅仅是漂亮的图片:导入快照地理位置自动定位您的位置。这意味着快照设置您的模型的经纬度,并定位在正确的主要方向。任何阴影研究你...

如何在SketchUp中使用场景动画区域

如何在SketchUp中使用场景动画区域

将区域视图与场景组合在一起以创建动画展示您的SketchUp模型都是一种有用且令人印象深刻的方式。基本的想法是,您可以使用场景来创建动画,其中您的剖面在您的模型中移动。以下是您可能需要使用此技巧的几个原因:如果...

编辑的选择

Drupal友好的网页寄存公司 - 傻瓜

Drupal友好的网页寄存公司 - 傻瓜

网页寄存公司为您提供访问Web服务器,您可以在其中安装Drupal并使您的网站在Web上可见。一些公司为您安装Drupal或为您提供一键安装,为您节省了一些工作量。如果您决定自己跳过Drupal的安装,请考虑通过以下方式之一获取帐户...

Drupal花园功能 - 傻瓜

Drupal花园功能 - 傻瓜

让您有机会查看和使用所有Drupal花园功能,可以创建一个新的站点,然后选择自定义选项而不是其中一个已安装的模板:确保已经登录,然后单击我的站点链接。这样做打开了Drupal花园站点经理。点击创建...

Drupal园林主题生成器 - 傻瓜

Drupal园林主题生成器 - 傻瓜

Drupal花园设置完成后,有一些乐趣和玩你的网站上的主题。使用Drupal Gardens Theme Builder控制网站的外观是与安装Drupal自身副本不同的主要方式。但是你不会错过太多...

编辑的选择

上一次显示一张照片(全屏播放)如何在您的照片上一次显示一张照片(全屏播放)尼康D5300 - 傻瓜

上一次显示一张照片(全屏播放)如何在您的照片上一次显示一张照片(全屏播放)尼康D5300 - 傻瓜

很可能您已经在尼康D5300上播放了播放模式。但是,在数码相机上查看照片有不同的选项。对于正常播放 - 即每次只能查看一张照片 - 请执行以下步骤:

如何自定义尼康D3300的优化校准 - 傻瓜

如何自定义尼康D3300的优化校准 - 傻瓜

当您使用尼康D3300的内置原始处理器,您可以尝试不同的优化校准设置,了解每个设置对图像的影响。当您使用免费的Nikon软件Nikon ViewNX处理图像时,您可以选择相同的选项。该程序的原始转换器,以及在Adobe Photoshop中找到的那些...

如何在HDMI屏幕上显示实时预览预览 - 假人

如何在HDMI屏幕上显示实时预览预览 - 假人

尼康D7100相机连接到HDMI(高清晰度多媒体接口)设备,以在该屏幕上查看实时显示输出。摄影师经常使用此功能,因为摄影师需要比相机显示器提供更大的主题。使用此选项时,会出现一些问题:...