diff --git a/wrap/io_trimesh/export_dxf.h b/wrap/io_trimesh/export_dxf.h
index 56e7323b..7f4e8557 100644
--- a/wrap/io_trimesh/export_dxf.h
+++ b/wrap/io_trimesh/export_dxf.h
@@ -86,22 +86,26 @@ public:
     fprintf(o,"ENDSEC\n");
     fprintf(o,"0\n");
     fprintf(o,"EOF\n");
-    fclose(o);
-    return 0;
+
+	int result = 0;
+	if (ferror(o)) result = 2;
+	fclose(o);
+	return result;
   }
   /// Standard call for knowing the meaning of an error code
   static const char *ErrorMsg(int error)
   {
-    static std::vector<std::string> dxf_error_msg;
-    if(dxf_error_msg.empty())
-    {
-      dxf_error_msg.resize(2 );
-      dxf_error_msg[0]="No errors";
-      dxf_error_msg[1]="Can't open file";
-    }
+	  static std::vector<std::string> dxf_error_msg;
+	  if (dxf_error_msg.empty())
+	  {
+		  dxf_error_msg.resize(3);
+		  dxf_error_msg[0] = "No errors";
+		  dxf_error_msg[1] = "Can't open file";
+		  dxf_error_msg[2] = "Output Stream Error";
+	  }
 
-    if(error>1 || error<0) return "Unknown error";
-    else return dxf_error_msg[error].c_str();
+	  if (error>2 || error<0) return "Unknown error";
+	  else return dxf_error_msg[error].c_str();
   }
 
 
diff --git a/wrap/io_trimesh/export_gts.h b/wrap/io_trimesh/export_gts.h
index 83bf9cfe..4af571cb 100644
--- a/wrap/io_trimesh/export_gts.h
+++ b/wrap/io_trimesh/export_gts.h
@@ -173,22 +173,27 @@ namespace vcg {
 					for(j=0,vi=m.vert.begin();vi!=m.vert.end();++vi)
 						(*vi).Flags()=FlagV[j++];
 
-					return 0;
+
+					int result = 0;
+					if (stream.status() != QTextStream::Ok) result = 3;
+					stream.flush();
+					return result;
 				}
 
         static const char *ErrorMsg(int error)
         {
-          static std::vector<std::string> off_error_msg;
-          if(off_error_msg.empty())
-          {
-            off_error_msg.resize(2 );
-            off_error_msg[0]="No errors";
-	          off_error_msg[1]="Can't open file";
-						off_error_msg[2]="Internal error";
-					}
+			static std::vector<std::string> off_error_msg;
+			if (off_error_msg.empty())
+			{
+				off_error_msg.resize(4);
+				off_error_msg[0] = "No errors";
+				off_error_msg[1] = "Can't open file";
+				off_error_msg[2] = "Internal error";
+				off_error_msg[3] = "Otput Stream Error";
+			}
 
-          if(error>2 || error<0) return "Unknown error";
-          else return off_error_msg[error].c_str();
+			if (error>3 || error<0) return "Unknown error";
+			else return off_error_msg[error].c_str();
         }
         /*
 	        returns mask of capability one define with what are the saveable information of the format.
diff --git a/wrap/io_trimesh/export_obj.h b/wrap/io_trimesh/export_obj.h
index 0f96aeee..c34d4b80 100644
--- a/wrap/io_trimesh/export_obj.h
+++ b/wrap/io_trimesh/export_obj.h
@@ -54,15 +54,16 @@ public:
         */
   enum SaveError
   {
-    E_NOERROR,					// 0
-    E_CANTOPENFILE,				// 1
-    E_CANTCLOSEFILE,			// 2
-    E_UNESPECTEDEOF,			// 3
-    E_ABORTED,					// 4
-    E_NOTDEFINITION,			// 5
-    E_NO_VERTICES,			// 6
-    E_NOTFACESVALID,				// 7
-    E_NO_VALID_MATERIAL
+    E_NOERROR,            // 0
+    E_CANTOPENFILE,       // 1
+    E_CANTCLOSEFILE,      // 2
+    E_UNESPECTEDEOF,      // 3
+    E_ABORTED,            // 4
+    E_NOTDEFINITION,      // 5
+    E_NO_VERTICES,        // 6
+    E_NOTFACESVALID,      // 7
+    E_NO_VALID_MATERIAL,  // 8
+	E_STREAMERROR         // 9
   };
 
   /*
@@ -72,18 +73,19 @@ public:
   {
     static const char* obj_error_msg[] =
     {
-      "No errors",							// 0
-      "Can't open file",						// 1
-      "can't close file",						// 2
-      "Premature End of file",				// 3
-      "File saving aborted",					// 4
-      "Function not defined",					// 5
-      "Vertices not valid",					// 6
-      "Faces not valid",						// 7
-      "The mesh has not a attribute containing the vector of materials"	// 8
+      "No errors",  // 0
+      "Can't open file",  // 1
+      "can't close file",  // 2
+      "Premature End of file",  // 3
+      "File saving aborted",  // 4
+      "Function not defined",  // 5
+      "Vertices not valid",  // 6
+      "Faces not valid",  // 7
+      "The mesh has not a attribute containing the vector of materials",  // 8
+	  "Output Stream Error" //9
     };
 
-    if(error>7 || error<0) return "Unknown error";
+    if(error>9 || error<0) return "Unknown error";
     else return obj_error_msg[error];
   };
 
@@ -277,7 +279,6 @@ public:
     fprintf(fp,"# %d faces, %d coords texture\n\n",m.fn,int(CoordIndexTexture.size()));
 
     fprintf(fp,"# End of File\n");
-    fclose(fp);
 
     int errCode = E_NOERROR;
     if((mask & Mask::IOM_WEDGTEXCOORD) || (mask & Mask::IOM_FACECOLOR) || (mask & Mask::IOM_VERTTEXCOORD) )
@@ -286,9 +287,13 @@ public:
       else                     errCode = WriteMaterials(materialVec, filename,cb);
     }
 
-    if(errCode!= E_NOERROR)
-      return errCode;
-    return E_NOERROR;
+	int result = E_NOERROR;
+	if (errCode != E_NOERROR)
+		result = errCode;
+	else if (ferror(fp))
+		result = E_STREAMERROR;
+	fclose(fp);
+	return result;
   }
 
    /*
diff --git a/wrap/io_trimesh/export_off.h b/wrap/io_trimesh/export_off.h
index 1da346dc..26a0e019 100644
--- a/wrap/io_trimesh/export_off.h
+++ b/wrap/io_trimesh/export_off.h
@@ -139,28 +139,30 @@ public:
       }
     }
 
-
-    fclose(fpout);
     // Recupera i flag originali
     j=0;
     for(vi=m.vert.begin();vi!=m.vert.end();++vi)
       (*vi).Flags()=FlagV[j++];
 
-    return 0;
+	int result = 0;
+	if (ferror(fpout)) result = 2;
+	fclose(fpout);
+	return result;
   }
 
   static const char *ErrorMsg(int error)
   {
-    static std::vector<std::string> off_error_msg;
-    if(off_error_msg.empty())
-    {
-      off_error_msg.resize(2 );
-      off_error_msg[0]="No errors";
-      off_error_msg[1]="Can't open file";
-    }
+	  static std::vector<std::string> off_error_msg;
+	  if (off_error_msg.empty())
+	  {
+		  off_error_msg.resize(3);
+		  off_error_msg[0] = "No errors";
+		  off_error_msg[1] = "Can't open file";
+		  off_error_msg[1] = "Output Stream error";
+	  }
 
-    if(error>1 || error<0) return "Unknown error";
-    else return off_error_msg[error].c_str();
+	  if (error>2 || error<0) return "Unknown error";
+	  else return off_error_msg[error].c_str();
   }
   /*
             returns mask of capability one define with what are the saveable information of the format.
diff --git a/wrap/io_trimesh/export_ply.h b/wrap/io_trimesh/export_ply.h
index afa3c23c..3bd6208d 100644
--- a/wrap/io_trimesh/export_ply.h
+++ b/wrap/io_trimesh/export_ply.h
@@ -756,8 +756,10 @@ namespace vcg {
                         }
                         assert(ecnt==m.en);
                     }
+					int result = 0;
+					if (ferror(fpout)) result = ply::E_STREAMERROR;
                     fclose(fpout);
-                    return 0;
+                    return result;
                 }
 
                 static const char *ErrorMsg(int error)
@@ -766,19 +768,21 @@ namespace vcg {
                     if(ply_error_msg.empty())
                     {
                         ply_error_msg.resize(PlyInfo::E_MAXPLYINFOERRORS );
-                        ply_error_msg[ply::E_NOERROR				]="No errors";
-                        ply_error_msg[ply::E_CANTOPEN				]="Can't open file";
-                        ply_error_msg[ply::E_NOTHEADER ]="Header not found";
-                        ply_error_msg[ply::E_UNESPECTEDEOF	]="Eof in header";
-                        ply_error_msg[ply::E_NOFORMAT				]="Format not found";
+                        ply_error_msg[ply::E_NOERROR            ]="No errors";
+                        ply_error_msg[ply::E_CANTOPEN           ]="Can't open file";
+                        ply_error_msg[ply::E_NOTHEADER          ]="Header not found";
+                        ply_error_msg[ply::E_UNESPECTEDEOF	    ]="Eof in header";
+                        ply_error_msg[ply::E_NOFORMAT           ]="Format not found";
                         ply_error_msg[ply::E_SYNTAX				]="Syntax error on header";
-                        ply_error_msg[ply::E_PROPOUTOFELEMENT]="Property without element";
+                        ply_error_msg[ply::E_PROPOUTOFELEMENT   ]="Property without element";
                         ply_error_msg[ply::E_BADTYPENAME		]="Bad type name";
                         ply_error_msg[ply::E_ELEMNOTFOUND		]="Element not found";
                         ply_error_msg[ply::E_PROPNOTFOUND		]="Property not found";
-                        ply_error_msg[ply::E_BADTYPE				]="Bad type on addtoread";
-                        ply_error_msg[ply::E_INCOMPATIBLETYPE]="Incompatible type";
-                        ply_error_msg[ply::E_BADCAST				]="Bad cast";
+                        ply_error_msg[ply::E_BADTYPE            ]="Bad type on addtoread";
+                        ply_error_msg[ply::E_INCOMPATIBLETYPE   ]="Incompatible type";
+                        ply_error_msg[ply::E_BADCAST            ]="Bad cast";
+
+						ply_error_msg[ply::E_STREAMERROR        ] = "Output Stream Error";
 
                         ply_error_msg[PlyInfo::E_NO_VERTEX      ]="No vertex field found";
                         ply_error_msg[PlyInfo::E_NO_FACE        ]="No face field found";
diff --git a/wrap/io_trimesh/export_stl.h b/wrap/io_trimesh/export_stl.h
index ff32d064..50859273 100644
--- a/wrap/io_trimesh/export_stl.h
+++ b/wrap/io_trimesh/export_stl.h
@@ -150,21 +150,24 @@ static int Save(SaveMeshType &m, const char * filename , bool binary =true, int
         }
         fprintf(fp,"endsolid vcg\n");
     }
+	int result = 0;
+	if (ferror(fp)) result = 2;
     fclose(fp);
-    return 0;
+	return result;
 }
 static const char *ErrorMsg(int error)
 {
-  static std::vector<std::string> stl_error_msg;
-  if(stl_error_msg.empty())
-  {
-    stl_error_msg.resize(2 );
-    stl_error_msg[0]="No errors";
-      stl_error_msg[1]="Can't open file";
-    }
+	static std::vector<std::string> stl_error_msg;
+	if (stl_error_msg.empty())
+	{
+		stl_error_msg.resize(3);
+		stl_error_msg[0] = "No errors";
+		stl_error_msg[1] = "Can't open file";
+		stl_error_msg[2] = "Output Stream error";
+	}
 
-  if(error>1 || error<0) return "Unknown error";
-  else return stl_error_msg[error].c_str();
+	if (error>2 || error<0) return "Unknown error";
+	else return stl_error_msg[error].c_str();
 };
 
 /*
diff --git a/wrap/io_trimesh/export_vrml.h b/wrap/io_trimesh/export_vrml.h
index b8ee4244..4348ef86 100644
--- a/wrap/io_trimesh/export_vrml.h
+++ b/wrap/io_trimesh/export_vrml.h
@@ -281,8 +281,10 @@ namespace vcg {
 						"  ]\n"
 						"}\n"
 						);
+					int result = 0;
+					if (ferror(fp)) result = 2;
 					fclose(fp);
-					return 0;
+					return result;
 	}
 	///Returns mask of capability one define with what are the saveable information of the format.
 	static int GetExportMaskCapability()
@@ -305,11 +307,12 @@ namespace vcg {
 		static std::vector<std::string> wrl_error_msg;
 		if(wrl_error_msg.empty())
 		{
-			wrl_error_msg.resize(2 );
-			wrl_error_msg[0]="No errors";
-			wrl_error_msg[1]="Can't open file";
+			wrl_error_msg.resize(3);
+			wrl_error_msg[0] = "No errors";
+			wrl_error_msg[1] = "Can't open file";
+			wrl_error_msg[1] = "Output Stream error";
 		}
-		if(error>1 || error<0) return "Unknown error";
+		if(error>2 || error<0) return "Unknown error";
 		else return wrl_error_msg[error].c_str();
 		}
 
diff --git a/wrap/io_trimesh/io_ply.h b/wrap/io_trimesh/io_ply.h
index b376ee86..d0cfc042 100644
--- a/wrap/io_trimesh/io_ply.h
+++ b/wrap/io_trimesh/io_ply.h
@@ -152,15 +152,15 @@ public:
 enum Error
 {
 		// Funzioni superiori
-  E_NO_VERTEX       = ply::E_MAXPLYERRORS+1,			// 14
-	E_NO_FACE         = ply::E_MAXPLYERRORS+2,				// 15
-	E_SHORTFILE       = ply::E_MAXPLYERRORS+3,			// 16
-	E_NO_3VERTINFACE  = ply::E_MAXPLYERRORS+4,		// 17
-	E_BAD_VERT_INDEX  = ply::E_MAXPLYERRORS+5,		// 18
-	E_NO_6TCOORD      = ply::E_MAXPLYERRORS+6,			// 19
-	E_DIFFER_COLORS   = ply::E_MAXPLYERRORS+7,	
-	E_BAD_VERT_INDEX_EDGE  = ply::E_MAXPLYERRORS+8,		// 18
-  E_MAXPLYINFOERRORS= ply::E_MAXPLYERRORS+9// 20
+	E_NO_VERTEX       = ply::E_MAXPLYERRORS+1,       // 15
+	E_NO_FACE         = ply::E_MAXPLYERRORS+2,       // 16
+	E_SHORTFILE       = ply::E_MAXPLYERRORS+3,       // 17
+	E_NO_3VERTINFACE  = ply::E_MAXPLYERRORS+4,       // 18
+	E_BAD_VERT_INDEX  = ply::E_MAXPLYERRORS+5,       // 19
+	E_NO_6TCOORD      = ply::E_MAXPLYERRORS+6,		 // 20
+	E_DIFFER_COLORS   = ply::E_MAXPLYERRORS+7,	     // 21
+	E_BAD_VERT_INDEX_EDGE  = ply::E_MAXPLYERRORS+8,  // 22
+	E_MAXPLYINFOERRORS= ply::E_MAXPLYERRORS+9        // 23
 };
 
 }; // end class
diff --git a/wrap/ply/plylib.h b/wrap/ply/plylib.h
index afdc6443..59e5eddd 100644
--- a/wrap/ply/plylib.h
+++ b/wrap/ply/plylib.h
@@ -91,6 +91,8 @@ enum PlyError {
 	E_BADTYPE,				// 10
 	E_INCOMPATIBLETYPE,		// 11
 	E_BADCAST,				// 12
+		//saving error
+	E_STREAMERROR,          // 13
 	E_MAXPLYERRORS
 };