/// <summary> /// Throws exception if HRESULT != 0. /// </summary> /// <param name="hresult">Result code to check.</param> /// <param name="message">Exception message.</param> /// <param name="handler">The class responsible for the callback.</param> internal void CheckedExecute(int hresult, string message, CallbackBase handler) { if (hresult != (int)OperationResult.Ok || handler.HasExceptions) { if (!handler.HasExceptions) { if (hresult < -2000000000) { ThrowException(handler, new SevenZipException( "Execution has failed due to an internal SevenZipSharp issue.\n" + "Please report it to https://github.com/squid-box/SevenZipSharp/issues/, include the release number, 7z version used, and attach the archive.")); } else { ThrowException(handler, new SevenZipException(message + hresult.ToString(CultureInfo.InvariantCulture) + '.')); } } else { ThrowException(handler, handler.Exceptions[0]); } } }
/// <summary> /// Throws the specified exception when is able to. /// </summary> /// <param name="e">The exception to throw.</param> /// <param name="handler">The handler responsible for the exception.</param> public bool ThrowException(CallbackBase handler, params Exception[] e) { if (_reportErrors && (handler == null || !handler.Canceled)) { throw e[0]; } return(false); }
/// <summary> /// Throws exception if HRESULT != 0. /// </summary> /// <param name="hresult">Result code to check.</param> /// <param name="message">Exception message.</param> /// <param name="handler">The class responsible for the callback.</param> internal void CheckedExecute(int hresult, string message, CallbackBase handler) { if (hresult != (int)OperationResult.Ok || handler.HasExceptions) { if (!handler.HasExceptions) { if (hresult < -2000000000) { SevenZipException exception; switch (hresult) { case -2147024784: exception = new SevenZipException("There is not enough space on the disk. (0x80070070: ERROR_DISK_FULL)"); break; case -2147024864: exception = new SevenZipException("The file is being used by another process. (0x80070020: ERROR_SHARING_VIOLATION)"); break; case -2147024882: exception = new SevenZipException("There is not enough memory (RAM). (0x8007000E: E_OUTOFMEMORY)"); break; case -2147024809: exception = new SevenZipException("Invalid arguments provided. (0x80070057: E_INVALIDARG)"); break; default: exception = new SevenZipException( $"Execution has failed due to an internal SevenZipSharp issue (0x{hresult:x} / {hresult}).\n" + "Please report it to https://github.com/squid-box/SevenZipSharp/issues/, include the release number, 7z version used, and attach the archive."); break; } ThrowException(handler, exception); } else { ThrowException(handler, new SevenZipException(message + hresult.ToString(CultureInfo.InvariantCulture) + '.')); } } else { ThrowException(handler, handler.Exceptions[0]); } } }
/// <summary> /// Throws exception if HRESULT != 0. /// </summary> /// <param name="hresult">Result code to check.</param> /// <param name="message">Exception message.</param> /// <param name="handler">The class responsible for the callback.</param> internal void CheckedExecute(int hresult, string message, CallbackBase handler) { if (hresult != (int)OperationResult.Ok || handler.HasExceptions) { if (!handler.HasExceptions) { if (hresult < -2000000000) { SevenZipException exception; switch (hresult) { case -2147024784: exception = new SevenZipException("There is not enough space on the disk. (0x80070070: DISK_FULL)"); break; default: exception = new SevenZipException( $"Execution has failed due to an internal SevenZipSharp issue (0x{hresult:x}).\n" + "Please report it to https://github.com/squid-box/SevenZipSharp/issues/, include the release number, 7z version used, and attach the archive."); break; } ThrowException(handler, exception); } else { ThrowException(handler, new SevenZipException(message + hresult.ToString(CultureInfo.InvariantCulture) + '.')); } } else { ThrowException(handler, handler.Exceptions[0]); } } }