Diff
checker
Texto
Texto
Imágenes
Documentos
Excel
Carpetas
Legal
Enterprise
Aplicación de escritorio
Precios
Iniciar sesión
Descargar Diffchecker Desktop
Comparar texto
Encuentra la diferencia entre dos archivos de texto
Herramientas
Historial
Visualización
Vista
Dividido
Unificado
Editor live
Ocultar espacios en blanco
Ocultar sin cambios
Sin ajuste de línea
Nivel de detalle
Inteligente
Sintaxis
Ninguno
Cambiar apariencia
Procesamiento
Ignorar
Transformar texto
Ir al primer cambio
Editar entrada
Diffchecker Desktop
La forma más segura de usar Diffchecker. ¡Obtén la app de Diffchecker Desktop: tus diffs nunca salen de tu computadora!
Obtener Desktop
file-v-xattr
Creado
hace 6 años
El diff nunca expira
Borrar
Exportar
Compartir
Explicar
21 eliminaciones
Líneas
Total
Eliminado
Caracteres
Total
Eliminado
Para continuar usando esta función, actualice a
Diff
checker
Pro
Ver precios
66 líneas
Copiar todo
16 adiciones
Líneas
Total
Añadido
Caracteres
Total
Añadido
Para continuar usando esta función, actualice a
Diff
checker
Pro
Ver precios
62 líneas
Copiar todo
Copiar
Copiado
Copiar
Copiado
QueryData
genXattr
(QueryContext& context
) {
QueryData
genFileImpl
(QueryContext& context
, Logger& logger
) {
QueryData results;
QueryData results;
Copiar
Copiado
Copiar
Copiado
// Resolve file paths for EQUALS and LIKE operations.
// Resolve file paths for EQUALS and LIKE operations.
auto paths = context.constraints["path"].getAll(EQUALS);
auto paths = context.constraints["path"].getAll(EQUALS);
context.expandConstraints(
context.expandConstraints(
"path",
"path",
LIKE,
LIKE,
paths,
paths,
([&](const std::string& pattern, std::set<std::string>& out) {
([&](const std::string& pattern, std::set<std::string>& out) {
std::vector<std::string> patterns;
std::vector<std::string> patterns;
auto status =
auto status =
resolveFilePattern(pattern, patterns, GLOB_ALL | GLOB_NO_CANON);
resolveFilePattern(pattern, patterns, GLOB_ALL | GLOB_NO_CANON);
if (status.ok()) {
if (status.ok()) {
for (const auto& resolved : patterns) {
for (const auto& resolved : patterns) {
out.insert(resolved);
out.insert(resolved);
}
}
}
}
return status;
return status;
}));
}));
Copiar
Copiado
Copiar
Copiado
// Iterate through each of the resolved/supplied paths.
for (const auto& path_string : paths) {
for (const auto& path_string : paths) {
Copiar
Copiado
Copiar
Copiado
boost::filesystem
::path path = path_string;
fs
::path path = path_string;
boost::system::error_code ec;
genFileInfo(path, path.parent_path(), "",
results
);
// Folders can have extended attributes too
if (!(boost::filesystem::is_regular_file(path, ec) ||
boost::filesystem::is_directory(path, ec))) {
continue;
}
getFileData(
results
, path.string()
);
}
}
// Resolve directories for EQUALS and LIKE operations.
// Resolve directories for EQUALS and LIKE operations.
auto directories = context.constraints["directory"].getAll(EQUALS);
auto directories = context.constraints["directory"].getAll(EQUALS);
context.expandConstraints(
context.expandConstraints(
"directory",
"directory",
LIKE,
LIKE,
directories,
directories,
([&](const std::string& pattern, std::set<std::string>& out) {
([&](const std::string& pattern, std::set<std::string>& out) {
std::vector<std::string> patterns;
std::vector<std::string> patterns;
auto status =
auto status =
resolveFilePattern(pattern, patterns, GLOB_FOLDERS | GLOB_NO_CANON);
resolveFilePattern(pattern, patterns, GLOB_FOLDERS | GLOB_NO_CANON);
if (status.ok()) {
if (status.ok()) {
for (const auto& resolved : patterns) {
for (const auto& resolved : patterns) {
out.insert(resolved);
out.insert(resolved);
}
}
}
}
return status;
return status;
}));
}));
// Now loop through constraints using the directory column constraint.
// Now loop through constraints using the directory column constraint.
for (const auto& directory_string : directories) {
for (const auto& directory_string : directories) {
if (!isReadable(directory_string) || !isDirectory(directory_string)) {
if (!isReadable(directory_string) || !isDirectory(directory_string)) {
continue;
continue;
}
}
Copiar
Copiado
Copiar
Copiado
std::vector<std::string>
file
s;
try {
if (listFilesInDirectory
(directory_string
, files).ok()) {
// Iterate over the directory and generate info for each regular
file
.
for (
const auto& file : files
) {
fs::directory_iterator begin
(directory_string
), end;
getFileData(
results
, file
);
for (
; begin != end; ++begin
) {
genFileInfo(begin->path(), directory_string, "",
results
);
}
}
Copiar
Copiado
Copiar
Copiado
} catch (const fs::filesystem_error& /* e */) {
continue;
}
}
}
}
Copiar
Copiado
Copiar
Copiado
return results;
}
}
}
Diferencias guardadas
Texto original
Abrir archivo
QueryData genXattr(QueryContext& context) { QueryData results; // Resolve file paths for EQUALS and LIKE operations. auto paths = context.constraints["path"].getAll(EQUALS); context.expandConstraints( "path", LIKE, paths, ([&](const std::string& pattern, std::set<std::string>& out) { std::vector<std::string> patterns; auto status = resolveFilePattern(pattern, patterns, GLOB_ALL | GLOB_NO_CANON); if (status.ok()) { for (const auto& resolved : patterns) { out.insert(resolved); } } return status; })); for (const auto& path_string : paths) { boost::filesystem::path path = path_string; boost::system::error_code ec; // Folders can have extended attributes too if (!(boost::filesystem::is_regular_file(path, ec) || boost::filesystem::is_directory(path, ec))) { continue; } getFileData(results, path.string()); } // Resolve directories for EQUALS and LIKE operations. auto directories = context.constraints["directory"].getAll(EQUALS); context.expandConstraints( "directory", LIKE, directories, ([&](const std::string& pattern, std::set<std::string>& out) { std::vector<std::string> patterns; auto status = resolveFilePattern(pattern, patterns, GLOB_FOLDERS | GLOB_NO_CANON); if (status.ok()) { for (const auto& resolved : patterns) { out.insert(resolved); } } return status; })); // Now loop through constraints using the directory column constraint. for (const auto& directory_string : directories) { if (!isReadable(directory_string) || !isDirectory(directory_string)) { continue; } std::vector<std::string> files; if (listFilesInDirectory(directory_string, files).ok()) { for (const auto& file : files) { getFileData(results, file); } } } return results; } } }
Texto modificado
Abrir archivo
QueryData genFileImpl(QueryContext& context, Logger& logger) { QueryData results; // Resolve file paths for EQUALS and LIKE operations. auto paths = context.constraints["path"].getAll(EQUALS); context.expandConstraints( "path", LIKE, paths, ([&](const std::string& pattern, std::set<std::string>& out) { std::vector<std::string> patterns; auto status = resolveFilePattern(pattern, patterns, GLOB_ALL | GLOB_NO_CANON); if (status.ok()) { for (const auto& resolved : patterns) { out.insert(resolved); } } return status; })); // Iterate through each of the resolved/supplied paths. for (const auto& path_string : paths) { fs::path path = path_string; genFileInfo(path, path.parent_path(), "", results); } // Resolve directories for EQUALS and LIKE operations. auto directories = context.constraints["directory"].getAll(EQUALS); context.expandConstraints( "directory", LIKE, directories, ([&](const std::string& pattern, std::set<std::string>& out) { std::vector<std::string> patterns; auto status = resolveFilePattern(pattern, patterns, GLOB_FOLDERS | GLOB_NO_CANON); if (status.ok()) { for (const auto& resolved : patterns) { out.insert(resolved); } } return status; })); // Now loop through constraints using the directory column constraint. for (const auto& directory_string : directories) { if (!isReadable(directory_string) || !isDirectory(directory_string)) { continue; } try { // Iterate over the directory and generate info for each regular file. fs::directory_iterator begin(directory_string), end; for (; begin != end; ++begin) { genFileInfo(begin->path(), directory_string, "", results); } } catch (const fs::filesystem_error& /* e */) { continue; } }
Encontrar la diferencia